{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "EMG_F.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7vANtJs1n92G"
      },
      "source": [
        "# EMG Signal for gesture recognition\n",
        "https://www.kaggle.com/sojanprajapati/emg-signal-for-gesture-recognition"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tzDMi_G3n-Hd"
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dcP0ePsyRblS",
        "outputId": "5f1d3966-9379-4281-a80f-b984b390b7c4",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "import os\n",
        "os.listdir(\"/content/drive/My Drive/ML and AI/Datasets\") # datasets save in my google drive"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['cat vs dog',\n",
              " 'compresive_strength_concrete',\n",
              " 'Mnist_fashion_dataset',\n",
              " 'Boston Housing dataset',\n",
              " 'sonar dataset',\n",
              " 'Iris dataset',\n",
              " 'diabetes dataset',\n",
              " 'bbc dataset',\n",
              " 'IMDB dataset',\n",
              " 'jena_climate',\n",
              " 'Amazon_Reviews',\n",
              " 'EMG_Signal_for_gesture_recognition',\n",
              " 'Houses Dataset']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 2
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LhFOScPZS5iR"
      },
      "source": [
        "import pandas as pd\n",
        "import tensorflow as tf\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np"
      ],
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EkbB2qmXRdtr",
        "outputId": "076bcd19-0f15-4b1b-cef0-bb10df0b4076",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "import pandas as pd\n",
        "Input_path = \"/content/drive/My Drive/ML and AI/Datasets/EMG_Signal_for_gesture_recognition/EMG-data.csv\"\n",
        "df = pd.read_csv(Input_path)\n",
        "print(df.head())\n",
        "print(df.shape)"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "   time  channel1  channel2  channel3  ...  channel7  channel8  class  label\n",
            "0     1   0.00001  -0.00002  -0.00001  ...   0.00000  -0.00001      0      1\n",
            "1     5   0.00001  -0.00002  -0.00001  ...   0.00000  -0.00001      0      1\n",
            "2     6  -0.00001   0.00001   0.00002  ...  -0.00001   0.00001      0      1\n",
            "3     7  -0.00001   0.00001   0.00002  ...  -0.00001   0.00001      0      1\n",
            "4     8  -0.00001   0.00001   0.00002  ...  -0.00001   0.00001      0      1\n",
            "\n",
            "[5 rows x 11 columns]\n",
            "(4237907, 11)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0EKLGPduSQ7F",
        "outputId": "04586f56-c508-4d5d-88d9-ab88b8b2b6c0",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "print(\"class :\", df[\"class\"].unique())\n",
        "print()\n",
        "#print(\"Labels :\",df[\"label\"].unique()) # 36 people hand gesture data\n",
        "#print()\n",
        "print(\"Value Count :\\n\",df[\"class\"].value_counts())"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "class : [0 1 2 3 4 5 6 7]\n",
            "\n",
            "Value Count :\n",
            " 0    2725157\n",
            "6     253009\n",
            "5     251733\n",
            "4     251570\n",
            "1     250055\n",
            "3     249494\n",
            "2     243193\n",
            "7      13696\n",
            "Name: class, dtype: int64\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2n0TlXtqSa2l",
        "outputId": "a412562a-5a6e-4aac-b658-c7ff245ad87a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        }
      },
      "source": [
        "features = df.drop(columns=[\"label\",\"class\",\"time\"])\n",
        "display(features.head())\n",
        "#print(features.shape())"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>channel1</th>\n",
              "      <th>channel2</th>\n",
              "      <th>channel3</th>\n",
              "      <th>channel4</th>\n",
              "      <th>channel5</th>\n",
              "      <th>channel6</th>\n",
              "      <th>channel7</th>\n",
              "      <th>channel8</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.00001</td>\n",
              "      <td>-0.00002</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>-0.00003</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>-0.00001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.00001</td>\n",
              "      <td>-0.00002</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>-0.00003</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>-0.00001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>0.00002</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>-0.00002</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>0.00002</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>-0.00002</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>0.00002</td>\n",
              "      <td>0.00000</td>\n",
              "      <td>0.00001</td>\n",
              "      <td>-0.00002</td>\n",
              "      <td>-0.00001</td>\n",
              "      <td>0.00001</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   channel1  channel2  channel3  ...  channel6  channel7  channel8\n",
              "0   0.00001  -0.00002  -0.00001  ...  -0.00001   0.00000  -0.00001\n",
              "1   0.00001  -0.00002  -0.00001  ...  -0.00001   0.00000  -0.00001\n",
              "2  -0.00001   0.00001   0.00002  ...  -0.00002  -0.00001   0.00001\n",
              "3  -0.00001   0.00001   0.00002  ...  -0.00002  -0.00001   0.00001\n",
              "4  -0.00001   0.00001   0.00002  ...  -0.00002  -0.00001   0.00001\n",
              "\n",
              "[5 rows x 8 columns]"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tLWCMkXASd_K",
        "outputId": "99bdadff-2551-43f4-fe93-5a6d2ee30dbb",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "Class = df[\"class\"]\n",
        "print(Class.unique())\n",
        "#print(Class.shape())"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[0 1 2 3 4 5 6 7]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nZM3B29xSl8s",
        "outputId": "62a2f6ac-0a6a-4d29-9da4-ee9aa24cd6d9",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "print(type(Class))\n",
        "print(type(features))\n",
        "\n",
        "Class = Class.values\n",
        "features = features.values\n",
        "\n",
        "print(type(Class))\n",
        "print(type(features))"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "<class 'pandas.core.series.Series'>\n",
            "<class 'pandas.core.frame.DataFrame'>\n",
            "<class 'numpy.ndarray'>\n",
            "<class 'numpy.ndarray'>\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MNT9FvwxSoGq"
      },
      "source": [
        "# split in training 80%, test 20% test \n",
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "x_train, x_test, y_train, y_test = train_test_split(features, Class, test_size=0.2, random_state=1)"
      ],
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kMAmEaHPSrSR"
      },
      "source": [
        "# Normalizing data\n",
        "mean = x_train.mean(axis=0)\n",
        "std = x_train.std(axis=0)\n",
        "\n",
        "x_train -= mean\n",
        "x_train /= std\n",
        "\n",
        "x_test -= mean\n",
        "x_test /= std"
      ],
      "execution_count": 10,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3WpOpN9CSwc6"
      },
      "source": [
        "# one hot encoding Labels\n",
        "y_train = tf.keras.utils.to_categorical(y_train)\n",
        "y_test = tf.keras.utils.to_categorical(y_test)"
      ],
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YqNtIiv0SxvD"
      },
      "source": [
        "# creating a function for plotting\n",
        "\n",
        "def plot(loss,val_loss,acc,val_acc):\n",
        "    loss = history.history['loss']\n",
        "    val_loss = history.history['val_loss']\n",
        "\n",
        "    epochs = range(1, len(loss) + 1)\n",
        "\n",
        "    plt.plot(epochs, loss, 'bo', label='Training loss')\n",
        "    plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
        "    plt.title('Training and validation loss')\n",
        "    plt.xlabel('Epochs')\n",
        "    plt.ylabel('Loss')\n",
        "    plt.legend()\n",
        "    plt.show()\n",
        "\n",
        "    acc = history.history['accuracy']\n",
        "    val_acc = history.history['val_accuracy']\n",
        "\n",
        "    epochs = range(1, len(acc) + 1)\n",
        "\n",
        "    plt.plot(epochs, acc, 'bo', label='Training acc')\n",
        "    plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
        "    plt.title('Training and validation acc')\n",
        "    plt.xlabel('Epochs')\n",
        "    plt.ylabel('acc')\n",
        "    plt.legend()\n",
        "    plt.show()"
      ],
      "execution_count": 12,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TtML1XBxjwHM"
      },
      "source": [
        "#################################"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "whhF7VhOkUjV"
      },
      "source": [
        "from tensorflow.keras import layers, Sequential, optimizers, Input, Model\n",
        "\n",
        "input_tensor = Input(shape=(8,))\n",
        "x = layers.Dense(1024, activation='relu')(input_tensor)\n",
        "y = layers.Dense(512, activation='relu')(x)\n",
        "z = layers.Dense(256, activation='relu')(y)\n",
        "z = layers.Dense(128, activation='relu')(z)\n",
        "z = layers.Dense(64, activation='relu')(z)\n",
        "z = layers.Dense(32, activation='relu')(z)\n",
        "z = layers.Dense(128, activation='relu')(y) # acyclic graghs of layers\n",
        "z = layers.Dense(64, activation='relu')(z)\n",
        "z = layers.Dense(32, activation='relu')(z)\n",
        "output_tensor = layers.Dense(8, activation='softmax')(z)\n",
        "\n",
        "model = Model(input_tensor, output_tensor)\n",
        "\n",
        "#SGD #RMSprop #Adam #Adadelta #Adagrad ##Adamax ###Nadam #Ftrl\n",
        "opt = optimizers.Nadam(lr=1e-3)\n",
        "model.compile(optimizer = opt, \n",
        "              loss = \"categorical_crossentropy\",\n",
        "              metrics = [\"accuracy\"])\n",
        "\n",
        "#model.summary()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UYxxVAP3k-Tz"
      },
      "source": [
        "# saving model, creating log for tensorboaed and applying few callbacks\n",
        "\n",
        "def callbacks(Log,Dir):\n",
        "  import tensorflow as tf\n",
        "  import os\n",
        "\n",
        "  Filepath = Path\n",
        "  logdir = os.path.join(Filepath, Dir)\n",
        "  \n",
        "  callbacks_list = [tf.keras.callbacks.TensorBoard(\n",
        "                    log_dir=logdir,                 #  tensorboard log path      \n",
        "                    histogram_freq=1,),\n",
        "                    tf.keras.callbacks.EarlyStopping(   # stop if not improving\n",
        "                    monitor='val_accuracy',patience=2,),           # monitor validation accuracy\n",
        "                    #tf.keras.callbacks.ReduceLROnPlateau(\n",
        "                    #monitor='val_loss',factor=0.1,         # lr ko .1 se multiply kerdo (kam kerdo)\n",
        "                    #patience=10,),                # reduce the lrate if val loss stop improving\n",
        "                    tf.keras.callbacks.ModelCheckpoint(\n",
        "                    filepath= Filepath,             # save model path\n",
        "                    monitor='val_loss',             # only save best weights\n",
        "                    save_best_only=True,)]\n",
        "  return callbacks_list"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "D_bOgY4VjwPM",
        "outputId": "d336489d-3862-47ae-857f-fe39d0454669",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "Path = \"model1\"\n",
        "Dir = \"my_log_dir\"   \n",
        "Call_B_Fun = callbacks(Path,Dir)\n",
        "\n",
        "batch_size = 512            \n",
        "epochs = 200                \n",
        "\n",
        "history = model.fit(x_train, y_train,\n",
        "                    batch_size=batch_size, epochs = epochs,\n",
        "                    validation_split = 0.2, callbacks=Call_B_Fun)\n",
        "\n",
        "loss = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "acc = history.history['accuracy']\n",
        "val_acc = history.history['val_accuracy']\n",
        "plot(loss,val_loss,acc,val_acc)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/200\n",
            "   1/5298 [..............................] - ETA: 0s - loss: 2.0781 - accuracy: 0.0312WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/summary_ops_v2.py:1277: stop (from tensorflow.python.eager.profiler) is deprecated and will be removed after 2020-07-01.\n",
            "Instructions for updating:\n",
            "use `tf.profiler.experimental.stop` instead.\n",
            "   2/5298 [..............................] - ETA: 3:42 - loss: 2.0452 - accuracy: 0.3213WARNING:tensorflow:Callbacks method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0199s vs `on_train_batch_end` time: 0.0638s). Check your callbacks.\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.9107 - accuracy: 0.6455WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n",
            "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n",
            "Instructions for updating:\n",
            "This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n",
            "INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.9107 - accuracy: 0.6455 - val_loss: 0.8852 - val_accuracy: 0.6493\n",
            "Epoch 2/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.8760 - accuracy: 0.6512INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.8759 - accuracy: 0.6512 - val_loss: 0.8689 - val_accuracy: 0.6550\n",
            "Epoch 3/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.8504 - accuracy: 0.6595INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.8504 - accuracy: 0.6595 - val_loss: 0.8416 - val_accuracy: 0.6625\n",
            "Epoch 4/200\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.8208 - accuracy: 0.6710INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.8208 - accuracy: 0.6710 - val_loss: 0.8131 - val_accuracy: 0.6755\n",
            "Epoch 5/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.7893 - accuracy: 0.6851INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.7893 - accuracy: 0.6850 - val_loss: 0.7841 - val_accuracy: 0.6896\n",
            "Epoch 6/200\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.7580 - accuracy: 0.6995INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.7580 - accuracy: 0.6995 - val_loss: 0.7602 - val_accuracy: 0.7024\n",
            "Epoch 7/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.7292 - accuracy: 0.7133INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.7291 - accuracy: 0.7133 - val_loss: 0.7347 - val_accuracy: 0.7135\n",
            "Epoch 8/200\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.7021 - accuracy: 0.7263INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.7021 - accuracy: 0.7263 - val_loss: 0.7086 - val_accuracy: 0.7260\n",
            "Epoch 9/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.6775 - accuracy: 0.7380INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.6775 - accuracy: 0.7380 - val_loss: 0.6892 - val_accuracy: 0.7369\n",
            "Epoch 10/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.6544 - accuracy: 0.7492INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.6543 - accuracy: 0.7492 - val_loss: 0.6680 - val_accuracy: 0.7467\n",
            "Epoch 11/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.6334 - accuracy: 0.7587INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.6334 - accuracy: 0.7587 - val_loss: 0.6534 - val_accuracy: 0.7542\n",
            "Epoch 12/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.6141 - accuracy: 0.7675INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.6141 - accuracy: 0.7675 - val_loss: 0.6366 - val_accuracy: 0.7615\n",
            "Epoch 13/200\n",
            "5288/5298 [============================>.] - ETA: 0s - loss: 0.5959 - accuracy: 0.7760INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5959 - accuracy: 0.7760 - val_loss: 0.6199 - val_accuracy: 0.7700\n",
            "Epoch 14/200\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.5797 - accuracy: 0.7831INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5797 - accuracy: 0.7831 - val_loss: 0.6045 - val_accuracy: 0.7775\n",
            "Epoch 15/200\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.5643 - accuracy: 0.7901INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5643 - accuracy: 0.7901 - val_loss: 0.5907 - val_accuracy: 0.7833\n",
            "Epoch 16/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.5505 - accuracy: 0.7963INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5505 - accuracy: 0.7963 - val_loss: 0.5798 - val_accuracy: 0.7897\n",
            "Epoch 17/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.5371 - accuracy: 0.8022INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5371 - accuracy: 0.8022 - val_loss: 0.5652 - val_accuracy: 0.7947\n",
            "Epoch 18/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.5247 - accuracy: 0.8077INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5247 - accuracy: 0.8077 - val_loss: 0.5638 - val_accuracy: 0.7961\n",
            "Epoch 19/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.5133 - accuracy: 0.8127INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5134 - accuracy: 0.8127 - val_loss: 0.5501 - val_accuracy: 0.8032\n",
            "Epoch 20/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.5026 - accuracy: 0.8172INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.5026 - accuracy: 0.8172 - val_loss: 0.5414 - val_accuracy: 0.8073\n",
            "Epoch 21/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.4923 - accuracy: 0.8217INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4923 - accuracy: 0.8217 - val_loss: 0.5298 - val_accuracy: 0.8132\n",
            "Epoch 22/200\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.4826 - accuracy: 0.8259INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4826 - accuracy: 0.8259 - val_loss: 0.5188 - val_accuracy: 0.8173\n",
            "Epoch 23/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.4739 - accuracy: 0.8293INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.4739 - accuracy: 0.8293 - val_loss: 0.5144 - val_accuracy: 0.8209\n",
            "Epoch 24/200\n",
            "5298/5298 [==============================] - 26s 5ms/step - loss: 0.4649 - accuracy: 0.8333 - val_loss: 0.5194 - val_accuracy: 0.8191\n",
            "Epoch 25/200\n",
            "5288/5298 [============================>.] - ETA: 0s - loss: 0.4574 - accuracy: 0.8363INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4573 - accuracy: 0.8363 - val_loss: 0.4982 - val_accuracy: 0.8279\n",
            "Epoch 26/200\n",
            "5288/5298 [============================>.] - ETA: 0s - loss: 0.4490 - accuracy: 0.8401INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4490 - accuracy: 0.8401 - val_loss: 0.4971 - val_accuracy: 0.8290\n",
            "Epoch 27/200\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.4423 - accuracy: 0.8424INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4423 - accuracy: 0.8424 - val_loss: 0.4900 - val_accuracy: 0.8321\n",
            "Epoch 28/200\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.4342 - accuracy: 0.8460INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4342 - accuracy: 0.8460 - val_loss: 0.4831 - val_accuracy: 0.8359\n",
            "Epoch 29/200\n",
            "5288/5298 [============================>.] - ETA: 0s - loss: 0.4284 - accuracy: 0.8486INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4284 - accuracy: 0.8485 - val_loss: 0.4787 - val_accuracy: 0.8378\n",
            "Epoch 30/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.4215 - accuracy: 0.8512INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4215 - accuracy: 0.8512 - val_loss: 0.4774 - val_accuracy: 0.8381\n",
            "Epoch 31/200\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.4155 - accuracy: 0.8537INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4155 - accuracy: 0.8537 - val_loss: 0.4651 - val_accuracy: 0.8435\n",
            "Epoch 32/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.4096 - accuracy: 0.8559INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4096 - accuracy: 0.8559 - val_loss: 0.4606 - val_accuracy: 0.8463\n",
            "Epoch 33/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.4035 - accuracy: 0.8587 - val_loss: 0.4622 - val_accuracy: 0.8451\n",
            "Epoch 34/200\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.3980 - accuracy: 0.8610INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3981 - accuracy: 0.8610 - val_loss: 0.4519 - val_accuracy: 0.8500\n",
            "Epoch 35/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.3926 - accuracy: 0.8630INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3926 - accuracy: 0.8630 - val_loss: 0.4518 - val_accuracy: 0.8491\n",
            "Epoch 36/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3876 - accuracy: 0.8650INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3876 - accuracy: 0.8650 - val_loss: 0.4464 - val_accuracy: 0.8533\n",
            "Epoch 37/200\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.3831 - accuracy: 0.8669INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3832 - accuracy: 0.8669 - val_loss: 0.4406 - val_accuracy: 0.8561\n",
            "Epoch 38/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3785 - accuracy: 0.8687INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3785 - accuracy: 0.8687 - val_loss: 0.4368 - val_accuracy: 0.8578\n",
            "Epoch 39/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.3738 - accuracy: 0.8706INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3738 - accuracy: 0.8706 - val_loss: 0.4326 - val_accuracy: 0.8588\n",
            "Epoch 40/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3696 - accuracy: 0.8724 - val_loss: 0.4368 - val_accuracy: 0.8587\n",
            "Epoch 41/200\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.3654 - accuracy: 0.8740INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3654 - accuracy: 0.8740 - val_loss: 0.4248 - val_accuracy: 0.8625\n",
            "Epoch 42/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.3608 - accuracy: 0.8758INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3608 - accuracy: 0.8758 - val_loss: 0.4235 - val_accuracy: 0.8634\n",
            "Epoch 43/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3576 - accuracy: 0.8770 - val_loss: 0.4241 - val_accuracy: 0.8636\n",
            "Epoch 44/200\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.3526 - accuracy: 0.8790INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3526 - accuracy: 0.8790 - val_loss: 0.4166 - val_accuracy: 0.8670\n",
            "Epoch 45/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3497 - accuracy: 0.8805 - val_loss: 0.4172 - val_accuracy: 0.8674\n",
            "Epoch 46/200\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.3461 - accuracy: 0.8817INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3461 - accuracy: 0.8817 - val_loss: 0.4082 - val_accuracy: 0.8715\n",
            "Epoch 47/200\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.3424 - accuracy: 0.8834INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3424 - accuracy: 0.8834 - val_loss: 0.4081 - val_accuracy: 0.8725\n",
            "Epoch 48/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3394 - accuracy: 0.8843 - val_loss: 0.4172 - val_accuracy: 0.8685\n",
            "Epoch 49/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.3353 - accuracy: 0.8862INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3353 - accuracy: 0.8862 - val_loss: 0.3986 - val_accuracy: 0.8750\n",
            "Epoch 50/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3323 - accuracy: 0.8872 - val_loss: 0.4008 - val_accuracy: 0.8752\n",
            "Epoch 51/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3296 - accuracy: 0.8882 - val_loss: 0.3995 - val_accuracy: 0.8764\n",
            "Epoch 52/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3262 - accuracy: 0.8898INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3262 - accuracy: 0.8898 - val_loss: 0.3959 - val_accuracy: 0.8786\n",
            "Epoch 53/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3233 - accuracy: 0.8909INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3233 - accuracy: 0.8909 - val_loss: 0.3924 - val_accuracy: 0.8798\n",
            "Epoch 54/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3207 - accuracy: 0.8919INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3207 - accuracy: 0.8919 - val_loss: 0.3897 - val_accuracy: 0.8805\n",
            "Epoch 55/200\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.3176 - accuracy: 0.8931INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3176 - accuracy: 0.8931 - val_loss: 0.3875 - val_accuracy: 0.8824\n",
            "Epoch 56/200\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.3147 - accuracy: 0.8943INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3147 - accuracy: 0.8943 - val_loss: 0.3874 - val_accuracy: 0.8826\n",
            "Epoch 57/200\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3126 - accuracy: 0.8951 - val_loss: 0.3888 - val_accuracy: 0.8818\n",
            "Epoch 58/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.3094 - accuracy: 0.8963INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3095 - accuracy: 0.8963 - val_loss: 0.3865 - val_accuracy: 0.8837\n",
            "Epoch 59/200\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.3069 - accuracy: 0.8975INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3069 - accuracy: 0.8975 - val_loss: 0.3780 - val_accuracy: 0.8870\n",
            "Epoch 60/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.3050 - accuracy: 0.8981INFO:tensorflow:Assets written to: model1/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3050 - accuracy: 0.8981 - val_loss: 0.3756 - val_accuracy: 0.8878\n",
            "Epoch 61/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3024 - accuracy: 0.8993 - val_loss: 0.3778 - val_accuracy: 0.8873\n",
            "Epoch 62/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2999 - accuracy: 0.9001 - val_loss: 0.3882 - val_accuracy: 0.8837\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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vVrvXT4R3HTTTZxwwgnVOle2yvtE0L59GGPw1FNw3XVa21gkG5155pk888wzOxahWbp0KcuXL+eoo45i1KhRFBQUcNBBB3HjjTfGfX2XLl348ssvAZg4cSLdu3fnyCOP3DFVNYQxAv379+fQQw/ljDPOYP369bzxxhtMmzaNq6++mt69e/Pxxx8zYsQIHnssDH+aPn06ffr04ZBDDuGCCy5g06ZNO97vxhtvpG/fvhxyyCEsXLiwwuvL9HTVdX7N4mRccQXceiv86ldh/nTQIDORRH70I5g7N7Xn7N0bbrst8fOtW7dmwIABPPfccwwdOpSpU6fy3e9+FzNj4sSJtG7dmm3btvHtb3+befPm0atXr7jnmTNnDlOnTmXu3Lls3bqVvn370q9fPwCGDRvGRRddBMD111/Pfffdx+WXX86QIUM49dRTOfPMM3c618aNGxkxYgTTp0+ne/funHfeefzhD3/gRz/6EQBt27bl7bff5s477+SWW27h3nvvTXh9mZ6uOu9LBBB6ELmXJYFSWttYJHvEVg/FVgs9+uij9O3blz59+jB//vydqnHKe/XVVzn99NNp1qwZu+22G0OGDNnx3Pvvv89RRx3FIYccQnFxMfPnz68wnkWLFtG1a1e6d+8OwPnnn88rr7yy4/lhw4YB0K9fvx0T1SXy2muvce655wLxp6u+4447WL16NQ0aNKB///488MADTJgwgffee4+WLVtWeO5kqEQQiUqNu9AgM5GdVfTNPZ2GDh3KlVdeydtvv8369evp168fn3zyCbfccguzZs1ijz32YMSIEQmnn67MiBEjePLJJzn00EOZMmUKM2fOrFG8pVNZ12Qa6zFjxnDKKafw7LPPUlhYyPPPP79juupnnnmGESNGcNVVV3HeeefVKFaVCCKdO8ffr0FmItmhRYsWHHfccVxwwQU7SgNr166lefPmtGrVihUrVvBcJVMMH3300Tz55JNs2LCBdevW8dRTT+14bt26dey9995s2bJlx9TRAC1btmTdunW7nOuAAw5g6dKlLF68GICHHnqIY445plrXlunpqlUiiEycGNoEYqvbNMhMJLsMHz6c008/fUcVUem0zT169GDfffelsLCwwtf37duXs88+m0MPPZQ999yT/v3773jupz/9KQMHDqRdu3YMHDhwx4f/Oeecw0UXXcQdd9yxo5EYoEmT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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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7KQfRMa/2FO1KEDkLv2c6oa6GgwqfPGF+4MPug8eHNLSrJn7DTe4f/NN1e9VVuY+aZL7PvuE5zz9dPfy8uqla2cBQnUQIpJ2FUPZpLPOoDYqi7/+Otz/uedg3jxYvz4sGzaE10aNYL/9ti377x+umT4d3n473KNjR7j6arjiilCnUB3164d+GqedBuPHh881HSPnK0CISMpVrkf49tuaNS3NRDBYswY+/xyWLg1f7n/9K7z5ZkjH3ntD//7QtCnsvntYGjeGtWth0SL4z3/C+RUV3P36wS23wAknwEEHpe7LvGlTuO661NwrrkRZi1xbsrGIaeDAgf7CCy9st2/8+PE+atSohNccccQRPnv2bHd3P/bYY/2bOPnPinGddubZZ5/1uXPnbt2+/vrrfebMmVVJfq3J9M9JaiaZoqNsLSbassV9wQL3p592v/569xNOcO/Wzb158x3T1aeP+403uhcVhet2pazMffFi92XLUpPWdEFFTJkxbNgwpk6dyjHHHLN139SpU/ntb3+b1PUzZszY9UkJTJs2jcGDB9O9e5jEb8yYMdW+l0iF6jY3TSQTOYO1a8N/9088Aa+8EnI3EDrXHXAAdO8OP/kJtG+/benaFfbZp2rvU79+eobqqVWJIkeuLdmYgygtLfV27dr5xo0b3d190aJF3qFDBy8vL/dRo0Z53759vXv37n7DDTdsvSY2B9GxY0dfvny5u7vfcsst3qVLFz/00EN96NChW3MQEydO9MLCQu/Ro4cPGTLE165d66+//rq3atXKO3Xq5D179vTi4mIfMWKE//nPf3Z395deesl79erlBx10kJ911lm+YcOGre93ww03eO/evf2ggw7yjz76aIdnWrRokR922GHeu3dv7927t7/++utbj912221+0EEHeY8ePfzqq692d/cFCxb4UUcd5T169PDevXt7cXHxDvfM9M9J4kt3pXJtViCvX+/+t7+5Dx/u3rRpeP/27cP7P/SQ++zZ7uvWpee9sx3KQcBll8GcOam9Z69ecPfdiY+3bt2afv368fzzz3PiiScydepUTjvtNMyMsWPH0rp1a7Zs2cJRRx3FBx98QI8ePeLe55133mHq1KnMmTOHsrIy+vTpQ9++fQEYMmQI5513HgDXXXcdDz/8MBdffDEnnHACgwcP5pRTTtnuXhs2bGDkyJG8/PLLdO3alTPP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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "R6uaEyPFjwSg"
      },
      "source": [
        "# saving our model\n",
        "model.save('model1/emg_1.h5')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CDCBgOIjs8_m"
      },
      "source": [
        "#################"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IQSvDxmljwYb",
        "outputId": "38c295d5-5355-4380-871e-48f1a4c3142d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 398
        }
      },
      "source": [
        "# loading saved model\n",
        "from tensorflow.keras.models import load_model\n",
        "emg = 'model1/emg_1.h5'\n",
        "emg_model = load_model(emg)\n",
        "#emg_model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"functional_1\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_1 (InputLayer)         [(None, 8)]               0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 1024)              9216      \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 512)               524800    \n",
            "_________________________________________________________________\n",
            "dense_6 (Dense)              (None, 128)               65664     \n",
            "_________________________________________________________________\n",
            "dense_7 (Dense)              (None, 64)                8256      \n",
            "_________________________________________________________________\n",
            "dense_8 (Dense)              (None, 32)                2080      \n",
            "_________________________________________________________________\n",
            "dense_9 (Dense)              (None, 8)                 264       \n",
            "=================================================================\n",
            "Total params: 610,280\n",
            "Trainable params: 610,280\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Oya7H1NvvYjH",
        "outputId": "cbb86a39-0c93-4acc-eeb8-6a1f1af1a477",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 363
        }
      },
      "source": [
        "# Removing layers\n",
        "\n",
        "new_model = Model(emg_model.inputs, emg_model.layers[-2].output) # removing layers\n",
        "new_model.summary()\n",
        "# removed all layers except conv"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"functional_11\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_1 (InputLayer)         [(None, 8)]               0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 1024)              9216      \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 512)               524800    \n",
            "_________________________________________________________________\n",
            "dense_6 (Dense)              (None, 128)               65664     \n",
            "_________________________________________________________________\n",
            "dense_7 (Dense)              (None, 64)                8256      \n",
            "_________________________________________________________________\n",
            "dense_8 (Dense)              (None, 32)                2080      \n",
            "=================================================================\n",
            "Total params: 610,016\n",
            "Trainable params: 610,016\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6tprWYHNr7nQ",
        "outputId": "84c11a25-be80-4a89-aa2b-a8238342c60a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 259
        }
      },
      "source": [
        "from tensorflow.keras import layers, optimizers, Input, Model\n",
        "\n",
        "input_tensor = Input(shape=(8,))\n",
        "x = new_model(input_tensor)       # this is our old model\n",
        "output_tensor = layers.Dense(8, activation='softmax')(x)\n",
        "\n",
        "model = Model(input_tensor, output_tensor)\n",
        "\n",
        "#SGD #RMSprop #Adam #Adadelta #Adagrad ##Adamax ###Nadam #Ftrl\n",
        "opt = optimizers.Nadam(lr=1e-3)\n",
        "model.compile(optimizer = opt, \n",
        "              loss = \"categorical_crossentropy\",\n",
        "              metrics = [\"accuracy\"])\n",
        "\n",
        "model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"functional_13\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_2 (InputLayer)         [(None, 8)]               0         \n",
            "_________________________________________________________________\n",
            "functional_11 (Functional)   (None, 32)                610016    \n",
            "_________________________________________________________________\n",
            "dense_10 (Dense)             (None, 8)                 264       \n",
            "=================================================================\n",
            "Total params: 610,280\n",
            "Trainable params: 610,280\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MilDJe_1vJ8p"
      },
      "source": [
        "def callbacks(Log,Dir):\n",
        "  import tensorflow as tf\n",
        "  import os\n",
        "\n",
        "  Filepath = Path\n",
        "  logdir = os.path.join(Filepath, Dir)\n",
        "  \n",
        "  callbacks_list = [tf.keras.callbacks.TensorBoard(\n",
        "                    log_dir=logdir,                 #  tensorboard log path      \n",
        "                    histogram_freq=1,),\n",
        "                    tf.keras.callbacks.EarlyStopping(   # stop if not improving\n",
        "                    monitor='val_loss',patience=2,),           # monitor validation loss\n",
        "                    tf.keras.callbacks.ReduceLROnPlateau(\n",
        "                    monitor='val_loss',factor=0.1,         # lr ko .1 se multiply kerdo (kam kerdo)\n",
        "                    patience=10,),                # reduce the lrate if val loss stop improving\n",
        "                    tf.keras.callbacks.ModelCheckpoint(\n",
        "                    filepath= Filepath,             # save model path\n",
        "                    monitor='val_loss',             # only save best weights\n",
        "                    save_best_only=True,)]\n",
        "  return callbacks_list"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JqzpvSCAv46r",
        "outputId": "9300bb8b-1532-489b-b2f5-2de62348a12e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "Path = \"model2\"\n",
        "Dir = \"my_log_dir\"   \n",
        "Call_B_Fun = callbacks(Path,Dir)\n",
        "\n",
        "batch_size = 512\n",
        "epochs = 200\n",
        "\n",
        "history = model.fit(x_train, y_train,\n",
        "                    batch_size=batch_size, epochs = epochs,\n",
        "                    validation_split = 0.2, callbacks=Call_B_Fun)\n",
        "\n",
        "loss = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "acc = history.history['accuracy']\n",
        "val_acc = history.history['val_accuracy']\n",
        "plot(loss,val_loss,acc,val_acc)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/200\n",
            "   2/5298 [..............................] - ETA: 3:35 - loss: 0.3995 - accuracy: 0.8535WARNING:tensorflow:Callbacks method `on_train_batch_end` is slow compared to the batch time (batch time: 0.0077s vs `on_train_batch_end` time: 0.0690s). Check your callbacks.\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.4029 - accuracy: 0.8537INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 29s 5ms/step - loss: 0.4029 - accuracy: 0.8537 - val_loss: 0.4397 - val_accuracy: 0.8534\n",
            "Epoch 2/200\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.3586 - accuracy: 0.8739INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3585 - accuracy: 0.8739 - val_loss: 0.4155 - val_accuracy: 0.8649\n",
            "Epoch 3/200\n",
            "5288/5298 [============================>.] - ETA: 0s - loss: 0.3416 - accuracy: 0.8814INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3416 - accuracy: 0.8814 - val_loss: 0.4032 - val_accuracy: 0.8712\n",
            "Epoch 4/200\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.3281 - accuracy: 0.8872INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3281 - accuracy: 0.8872 - val_loss: 0.3982 - val_accuracy: 0.8753\n",
            "Epoch 5/200\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.3184 - accuracy: 0.8915INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3184 - accuracy: 0.8915 - val_loss: 0.3905 - val_accuracy: 0.8785\n",
            "Epoch 6/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3110 - accuracy: 0.8946 - val_loss: 0.3908 - val_accuracy: 0.8794\n",
            "Epoch 7/200\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.3064 - accuracy: 0.8965INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.3064 - accuracy: 0.8965 - val_loss: 0.3760 - val_accuracy: 0.8860\n",
            "Epoch 8/200\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.3018 - accuracy: 0.8986INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.3018 - accuracy: 0.8986 - val_loss: 0.3759 - val_accuracy: 0.8864\n",
            "Epoch 9/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2977 - accuracy: 0.9001 - val_loss: 0.3796 - val_accuracy: 0.8859\n",
            "Epoch 10/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.2940 - accuracy: 0.9019INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2940 - accuracy: 0.9019 - val_loss: 0.3705 - val_accuracy: 0.8901\n",
            "Epoch 11/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2900 - accuracy: 0.9032INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2900 - accuracy: 0.9032 - val_loss: 0.3675 - val_accuracy: 0.8913\n",
            "Epoch 12/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2870 - accuracy: 0.9046 - val_loss: 0.3697 - val_accuracy: 0.8906\n",
            "Epoch 13/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2836 - accuracy: 0.9058INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2836 - accuracy: 0.9058 - val_loss: 0.3638 - val_accuracy: 0.8945\n",
            "Epoch 14/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2813 - accuracy: 0.9069 - val_loss: 0.3806 - val_accuracy: 0.8890\n",
            "Epoch 15/200\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.2785 - accuracy: 0.9078INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2785 - accuracy: 0.9078 - val_loss: 0.3634 - val_accuracy: 0.8950\n",
            "Epoch 16/200\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2764 - accuracy: 0.9088INFO:tensorflow:Assets written to: model2/assets\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2764 - accuracy: 0.9088 - val_loss: 0.3563 - val_accuracy: 0.8979\n",
            "Epoch 17/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2744 - accuracy: 0.9095 - val_loss: 0.3571 - val_accuracy: 0.8980\n",
            "Epoch 18/200\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2716 - accuracy: 0.9109 - val_loss: 0.3565 - val_accuracy: 0.8987\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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Vxx//PG88847zJgxo9jrGGrXrr3jdfXq1ROOjyRzzJ4YM2YM9957L99//z29e/dm8eLFHHPMMcyZM4emTZsyZMgQHnzwwbR+zZIocSTpxhuhVSu4+GLYtCnX0YhULuPGQd26u5bVrRvKM2Xt2rU0bdoUgPvvvz/t9bdt25Zly5axfPlyAB599NFSzzn66KMpjAZ2Zs+eTePGjdl777354IMP6NixI1dffTU9evRg8eLFrFixggMOOICLLrqIn/3sZ7z++utpfw/FUeJIUt26cNddsGQJ/O53uY5GpHIpKAhdwi1bgll4njgxveMb8a666iquueYaunbtmvYWAsBee+3FnXfeSd++fenevTsNGjRgn332KfGcsWPHsmDBAjp16sSYMWN44IEHALjjjjs47LDD6NSpEzVr1qRfv37Mnj2bzp0707VrVx599FEuvfTStL+H4lSJe47n5+d7um7kVFAA//gHLFwIhx6alipFKqX33nuPQ6v4L8m3335L/fr1cXcuueQS2rRpw6hRo3IdVkKJvl9mtsDd8+OPVYsjRX/6E9SrF7qstm/PdTQiUp7dc889dOnShQ4dOrB27VouvvjiXIeUFkocKdp/f7jtNpg7F+67L9fRiEh5VnTh4bvvvkthYSF14wdyKigljjK48EI49li48kpIMDNPRKRSU+IoAzO4++5wgdJll+U6GhGR7FLiKKO2beHaa8NSJP/5T66jERHJnowmDjPra2ZLzGypmY0p4bgzzczNLD/a/pGZLTCzt6PnE2KOnR3VuTB67J/J91CSMWOgXbuwCOJ33+UqChGR7MpY4jCz6sAEoB/QHhhkZu0THNcAuBR4NaZ4NXCqu3cELgD+Hndagbt3iR5fZOQNJKF27TDXfPlyGDs2V1GISLzjjz+eWbNm7VJ2xx13MGLEiGLPOe644yiatn/yySfzzTff7HbM2LFjue2220r82tOmTePdd9/dsX3DDTfw9NNPpxJ+QuVp+fVMtjh6AkvdfZm7bwamAAMTHPcb4A/Ajuv93f0Nd/8k2lwE7GVmtROcm3NHHw0/+1mYprtwYa6jEREI60JNiVvSesqUKUmtFwVhVdt99923TF87PnHcdNNN9OnTp0x1lVeZTBxNgY9jtldGZTuYWTegubs/UUI9ZwKvu3vsQh+To26qX1k5uDflLbdA48Zw0UWwbVuuoxGR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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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nnkma9as4c033+Spp57i6quvpn379syfP59Bgwbxj3/8A4AXX3yRDh060LZtWwYPHsz69eu3vt/1119Px44dadu2LR999NF2MWlYcElHJtoPVDUUv2o/J3WpK66A6dMze8727WHs2LK3N2nShM6dO/Pss8/Ss2dPJk6cyFlnnYWZMXr0aJo0acLmzZs5+eSTmTlzJocffnjK87z33ntMnDiR6dOns2nTJjp27EinTp0A6N27NxdccAEAv/3tb7nnnnu49NJL6dGjB2eccQZ9+vTZ5lzr1q1j0KBBvPjiixx88MGce+653HnnnVxxxRUANGvWjPfff5877riDMWPGcPfdd29z/F577cXUqVOpU6cOn3zyCf3796e4uJhnn32WJ598krfffpu6devyzTffADBgwACuvfZaevXqxbp169iyZUuFrrVULZlsP1BCiI9KEFmWWM2UWL306KOP0rFjRzp06MCsWbO2qQ5K9tprr9GrVy/q1q3LnnvuSY8ePbZu+/DDDzn++ONp27YtEyZMKHO48FJz586lVatWHHzwwQAMHDiQV199dev23r17A9CpU6etA/wl0rDg1V8m7j1Q19LqIW9KEOX90s+mnj17Mnz4cN5//33WrFlDp06d+PTTTxkzZgzvvvsujRs3ZtCgQaxbt65C5x80aBCTJk2iXbt23H///UybNm2X4i0dMrys4cI1LHj1lqkhrUeP3vY8oPaDqkgliCyrX78+J510EoMHD95aevj222+pV68eDRs25Msvv+TZZ58t9xwnnHACkyZNYu3ataxevZp//etfW7etXr2affbZh40bNzIh4adegwYNWL16+xlbW7duTUlJCfPmzQPCqKwnnnhi2p9Hw4JXb5m690DtB9WDEkQl6N+/PzNmzNiaINq1a0eHDh045JBDOOecczj22GPLPb5jx46cffbZtGvXjtNOO40jjjhi67b//d//5cgjj+TYY4/lkEMO2bq+X79+3HTTTXTo0GGbhuE6depw33330bdvX9q2bUuNGjUYOnRo2p9Fw4JXbxqWQhJpsD6Jnf6dMiMTA8llcmA7qRo0WJ9INZeLQ1pL1acEIVINqO1AsqHa92Jyd8ws7jCkDNWlijNumW47UEIQqOYliDp16rB8+XJ9CeUod2f58uXqKpsBuu9AsqFalyAKCgpYtGgRy5YtizsUKUOdOnUo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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "G-RL82Bsv5AB"
      },
      "source": [
        "# saving our model\n",
        "model.save('model2/emg_2.h5')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "G-bk9G7Qv5Gz"
      },
      "source": [
        "###################"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hX-JbgrQv5EW"
      },
      "source": [
        "# loading saved model\n",
        "from tensorflow.keras.models import load_model\n",
        "emg = 'model2/emg_2.h5'\n",
        "emg_model = load_model(emg)\n",
        "#emg_model.summary()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9cFdvNaH0gss"
      },
      "source": [
        "from tensorflow.keras import layers, Sequential, optimizers, Input, Model\n",
        "\n",
        "input_tensor = Input(shape=(8,))\n",
        "x = layers.Dense(1024, activation='relu')(input_tensor)\n",
        "y = layers.Dense(512, activation='relu')(x)\n",
        "z = layers.Dense(256, activation='relu')(y)\n",
        "z = layers.Dense(128, activation='relu')(z)\n",
        "z = layers.Dense(64, activation='relu')(z)\n",
        "z = layers.Dense(32, activation='relu')(z)\n",
        "z = layers.Dense(128, activation='relu')(y) # acyclic graghs of layers\n",
        "z = layers.Dense(64, activation='relu')(z)\n",
        "z = layers.Dense(32, activation='relu')(z)\n",
        "output_tensor = layers.Dense(8, activation='softmax')(z)\n",
        "\n",
        "model = Model(input_tensor, output_tensor)\n",
        "\n",
        "opt = optimizers.Nadam(lr=1e-3)\n",
        "model.compile(optimizer = opt, \n",
        "              loss = \"categorical_crossentropy\",\n",
        "              metrics = [\"accuracy\"])\n",
        "\n",
        "model.set_weights(emg_model.get_weights())   # using pretrained model weights\n",
        "\n",
        "#model.summary()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jjPuVpgsv4-L",
        "outputId": "83047a16-c2b7-436c-a4d5-bae13b47486c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "callbacks_list = [tf.keras.callbacks.EarlyStopping(   # stop if not improving\n",
        "                monitor='acc',patience=5,),           # monitor validation accuracy\n",
        "                tf.keras.callbacks.ModelCheckpoint(\n",
        "                filepath='my_model.h5',\n",
        "                monitor='val_loss',                   # only save best weights\n",
        "                save_best_only=True,)]                # when vall loss is improved\n",
        "\n",
        "batch_size = 512            \n",
        "epochs = 50                \n",
        "\n",
        "history = model.fit(x_train, y_train,\n",
        "                    batch_size=batch_size, epochs = epochs,\n",
        "                    validation_split = 0.2,\n",
        "                    callbacks=callbacks_list)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2683 - accuracy: 0.9122WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2683 - accuracy: 0.9122 - val_loss: 0.3583 - val_accuracy: 0.8976\n",
            "Epoch 2/50\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.2660 - accuracy: 0.9130WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2660 - accuracy: 0.9130 - val_loss: 0.3544 - val_accuracy: 0.8996\n",
            "Epoch 3/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2640 - accuracy: 0.9137WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2640 - accuracy: 0.9137 - val_loss: 0.3704 - val_accuracy: 0.8937\n",
            "Epoch 4/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2634 - accuracy: 0.9140WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2634 - accuracy: 0.9140 - val_loss: 0.3509 - val_accuracy: 0.9022\n",
            "Epoch 5/50\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.2622 - accuracy: 0.9144WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2622 - accuracy: 0.9144 - val_loss: 0.3445 - val_accuracy: 0.9031\n",
            "Epoch 6/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2600 - accuracy: 0.9152WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2600 - accuracy: 0.9152 - val_loss: 0.3394 - val_accuracy: 0.9063\n",
            "Epoch 7/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2589 - accuracy: 0.9157WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2589 - accuracy: 0.9157 - val_loss: 0.3532 - val_accuracy: 0.9011\n",
            "Epoch 8/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2568 - accuracy: 0.9165WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2567 - accuracy: 0.9165 - val_loss: 0.3436 - val_accuracy: 0.9044\n",
            "Epoch 9/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2551 - accuracy: 0.9172WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2551 - accuracy: 0.9172 - val_loss: 0.3442 - val_accuracy: 0.9055\n",
            "Epoch 10/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2539 - accuracy: 0.9177WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2540 - accuracy: 0.9177 - val_loss: 0.3591 - val_accuracy: 0.8995\n",
            "Epoch 11/50\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.2523 - accuracy: 0.9183WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2523 - accuracy: 0.9183 - val_loss: 0.3457 - val_accuracy: 0.9051\n",
            "Epoch 12/50\n",
            "5292/5298 [============================>.] - ETA: 0s - loss: 0.2505 - accuracy: 0.9189WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2505 - accuracy: 0.9189 - val_loss: 0.3473 - val_accuracy: 0.9047\n",
            "Epoch 13/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2492 - accuracy: 0.9195WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2492 - accuracy: 0.9195 - val_loss: 0.3455 - val_accuracy: 0.9052\n",
            "Epoch 14/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2477 - accuracy: 0.9202WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2477 - accuracy: 0.9202 - val_loss: 0.3406 - val_accuracy: 0.9074\n",
            "Epoch 15/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2459 - accuracy: 0.9207WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2459 - accuracy: 0.9207 - val_loss: 0.3436 - val_accuracy: 0.9060\n",
            "Epoch 16/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2445 - accuracy: 0.9212WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2445 - accuracy: 0.9212 - val_loss: 0.3408 - val_accuracy: 0.9079\n",
            "Epoch 17/50\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.2441 - accuracy: 0.9216WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2441 - accuracy: 0.9215 - val_loss: 0.3381 - val_accuracy: 0.9087\n",
            "Epoch 18/50\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.2410 - accuracy: 0.9225WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2410 - accuracy: 0.9225 - val_loss: 0.3424 - val_accuracy: 0.9071\n",
            "Epoch 19/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2410 - accuracy: 0.9226WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2410 - accuracy: 0.9226 - val_loss: 0.3454 - val_accuracy: 0.9068\n",
            "Epoch 20/50\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.2397 - accuracy: 0.9232WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2397 - accuracy: 0.9232 - val_loss: 0.3358 - val_accuracy: 0.9109\n",
            "Epoch 21/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2377 - accuracy: 0.9237WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2377 - accuracy: 0.9237 - val_loss: 0.3360 - val_accuracy: 0.9104\n",
            "Epoch 22/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2369 - accuracy: 0.9240WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2369 - accuracy: 0.9240 - val_loss: 0.3430 - val_accuracy: 0.9082\n",
            "Epoch 23/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2349 - accuracy: 0.9250WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2349 - accuracy: 0.9250 - val_loss: 0.3304 - val_accuracy: 0.9131\n",
            "Epoch 24/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2343 - accuracy: 0.9253WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2344 - accuracy: 0.9253 - val_loss: 0.3340 - val_accuracy: 0.9123\n",
            "Epoch 25/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2333 - accuracy: 0.9257WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2333 - accuracy: 0.9257 - val_loss: 0.3336 - val_accuracy: 0.9121\n",
            "Epoch 26/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2322 - accuracy: 0.9259WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2322 - accuracy: 0.9259 - val_loss: 0.3323 - val_accuracy: 0.9132\n",
            "Epoch 27/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2302 - accuracy: 0.9266WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2302 - accuracy: 0.9266 - val_loss: 0.3355 - val_accuracy: 0.9118\n",
            "Epoch 28/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2292 - accuracy: 0.9269WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2292 - accuracy: 0.9269 - val_loss: 0.3375 - val_accuracy: 0.9114\n",
            "Epoch 29/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2282 - accuracy: 0.9274WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2282 - accuracy: 0.9274 - val_loss: 0.3383 - val_accuracy: 0.9111\n",
            "Epoch 30/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2276 - accuracy: 0.9276WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2276 - accuracy: 0.9276 - val_loss: 0.3446 - val_accuracy: 0.9084\n",
            "Epoch 31/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2253 - accuracy: 0.9285WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2253 - accuracy: 0.9285 - val_loss: 0.3397 - val_accuracy: 0.9108\n",
            "Epoch 32/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2253 - accuracy: 0.9285WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2253 - accuracy: 0.9285 - val_loss: 0.3239 - val_accuracy: 0.9174\n",
            "Epoch 33/50\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.2231 - accuracy: 0.9292WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2231 - accuracy: 0.9292 - val_loss: 0.3272 - val_accuracy: 0.9166\n",
            "Epoch 34/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2229 - accuracy: 0.9294WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2229 - accuracy: 0.9294 - val_loss: 0.3327 - val_accuracy: 0.9129\n",
            "Epoch 35/50\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.2213 - accuracy: 0.9301WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2213 - accuracy: 0.9301 - val_loss: 0.3221 - val_accuracy: 0.9188\n",
            "Epoch 36/50\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.2212 - accuracy: 0.9300WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2212 - accuracy: 0.9300 - val_loss: 0.3252 - val_accuracy: 0.9162\n",
            "Epoch 37/50\n",
            "5290/5298 [============================>.] - ETA: 0s - loss: 0.2203 - accuracy: 0.9304WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2203 - accuracy: 0.9304 - val_loss: 0.3230 - val_accuracy: 0.9179\n",
            "Epoch 38/50\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.2178 - accuracy: 0.9310WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2178 - accuracy: 0.9310 - val_loss: 0.3228 - val_accuracy: 0.9194\n",
            "Epoch 39/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2181 - accuracy: 0.9311WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2181 - accuracy: 0.9311 - val_loss: 0.3341 - val_accuracy: 0.9147\n",
            "Epoch 40/50\n",
            "5289/5298 [============================>.] - ETA: 0s - loss: 0.2164 - accuracy: 0.9316WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2164 - accuracy: 0.9316 - val_loss: 0.3273 - val_accuracy: 0.9175\n",
            "Epoch 41/50\n",
            "5294/5298 [============================>.] - ETA: 0s - loss: 0.2162 - accuracy: 0.9319WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2162 - accuracy: 0.9319 - val_loss: 0.3282 - val_accuracy: 0.9155\n",
            "Epoch 42/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2149 - accuracy: 0.9322WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2149 - accuracy: 0.9322 - val_loss: 0.3256 - val_accuracy: 0.9175\n",
            "Epoch 43/50\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.2141 - accuracy: 0.9326WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2141 - accuracy: 0.9326 - val_loss: 0.3259 - val_accuracy: 0.9183\n",
            "Epoch 44/50\n",
            "5296/5298 [============================>.] - ETA: 0s - loss: 0.2131 - accuracy: 0.9329WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2131 - accuracy: 0.9329 - val_loss: 0.3245 - val_accuracy: 0.9183\n",
            "Epoch 45/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2118 - accuracy: 0.9335WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2118 - accuracy: 0.9335 - val_loss: 0.3249 - val_accuracy: 0.9184\n",
            "Epoch 46/50\n",
            "5295/5298 [============================>.] - ETA: 0s - loss: 0.2118 - accuracy: 0.9333WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2118 - accuracy: 0.9333 - val_loss: 0.3217 - val_accuracy: 0.9199\n",
            "Epoch 47/50\n",
            "5298/5298 [==============================] - ETA: 0s - loss: 0.2103 - accuracy: 0.9340WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 28s 5ms/step - loss: 0.2103 - accuracy: 0.9340 - val_loss: 0.3254 - val_accuracy: 0.9192\n",
            "Epoch 48/50\n",
            "5297/5298 [============================>.] - ETA: 0s - loss: 0.2101 - accuracy: 0.9340WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2101 - accuracy: 0.9340 - val_loss: 0.3227 - val_accuracy: 0.9198\n",
            "Epoch 49/50\n",
            "5291/5298 [============================>.] - ETA: 0s - loss: 0.2084 - accuracy: 0.9346WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2084 - accuracy: 0.9346 - val_loss: 0.3153 - val_accuracy: 0.9245\n",
            "Epoch 50/50\n",
            "5293/5298 [============================>.] - ETA: 0s - loss: 0.2077 - accuracy: 0.9350WARNING:tensorflow:Early stopping conditioned on metric `acc` which is not available. Available metrics are: loss,accuracy,val_loss,val_accuracy\n",
            "5298/5298 [==============================] - 27s 5ms/step - loss: 0.2077 - accuracy: 0.9350 - val_loss: 0.3203 - val_accuracy: 0.9222\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oiH8gtt_0aSS"
      },
      "source": [
        "model.save('emg_3.h5')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vszuFL6P0aP6",
        "outputId": "947157d0-7039-4f65-f273-25bf71e520e1",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 573
        }
      },
      "source": [
        "loss = history.history['loss']\n",
        "val_loss = history.history['val_loss']\n",
        "acc = history.history['accuracy']\n",
        "val_acc = history.history['val_accuracy']\n",
        "plot(loss,val_loss,acc,val_acc)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dfZyNdf748dfbuEuU25WM2yIpzDBIKiq1pKXSnUS2G7Faym6lmy1p7e432l+1ZWu60Z2iW6tiVVJ0T0IRG0IjoXEz5G7GvH9/fK7DmXHOmXNmzjVn5sz7+XicxznX57o5n+sY530+96KqGGOMMYVVSnQGjDHGlE0WIIwxxoRkAcIYY0xIFiCMMcaEZAHCGGNMSBYgjDHGhGQBwpQKEZktItfE+9hEEpF1ItLLh+uqiJzovX5cRP4SzbHFeJ9BIvJucfMZ4bo9RSQr3tc1pa9yojNgyi4R2R20WQPYDxz0tm9U1anRXktV+/hxbLJT1eHxuI6INAd+AKqoap537alA1P+GpuKxAGHCUtWagdcisg64XlXfL3yciFQOfOkYY5KHVTGZmAWqEETkdhH5GZgiInVE5G0R2Soi273XqUHnfCgi13uvh4rIxyIyyTv2BxHpU8xjW4jIfBHZJSLvi8hjIvJimHxHk8f7ReQT73rvikj9oP2DRWS9iGSLyF0RPp+uIvKziKQEpV0sIsu8111E5DMR2SEim0TkURGpGuZaz4rIX4O2b/XO+UlEri10bF8R+VpEckTkRxEZF7R7vve8Q0R2i0i3wGcbdP7pIrJQRHZ6z6dH+9lEIiIne+fvEJHlItIvaN8FIrLCu+ZGEfmzl17f+/fZISLbRGSBiNj3VSmzD9wU13FAXaAZMAz3tzTF224K7AUejXB+V2AVUB94AHhaRKQYx74EfAnUA8YBgyO8ZzR5vAr4PfAboCoQ+MJqC/zbu/7x3vulEoKqfgH8CpxT6Lovea8PArd499MNOBf4Q4R84+Wht5ef84BWQOH2j1+BIUBtoC8wQkQu8vad5T3XVtWaqvpZoWvXBd4BHvHu7Z/AOyJSr9A9HPHZFJHnKsBbwLveeX8EporISd4hT+OqK2sBpwIfeOl/ArKABkBD4E7A5gUqZRYgTHHlA/eq6n5V3auq2ar6uqruUdVdwASgR4Tz16vqk6p6EHgOaIT7Ioj6WBFpCnQG7lHVA6r6MTAz3BtGmccpqvo/Vd0LvAKkeemXAm+r6nxV3Q/8xfsMwnkZGAggIrWAC7w0VPUrVf1cVfNUdR3wRIh8hHK5l79vVfVXXEAMvr8PVfUbVc1X1WXe+0VzXXAB5XtVfcHL18vASuB3QceE+2wiOQ2oCfzD+zf6AHgb77MBcoG2InKMqm5X1cVB6Y2AZqqaq6oL1CaOK3UWIExxbVXVfYENEakhIk94VTA5uCqN2sHVLIX8HHihqnu8lzVjPPZ4YFtQGsCP4TIcZR5/Dnq9JyhPxwdf2/uCzg73XrjSwiUiUg24BFisquu9fLT2qk9+9vLxN1xpoigF8gCsL3R/XUVknleFthMYHuV1A9deXyhtPdA4aDvcZ1NknlU1OJgGX3cALniuF5GPRKSblz4RWA28KyJrRWRsdLdh4skChCmuwr/m/gScBHRV1WM4XKURrtooHjYBdUWkRlBakwjHlySPm4Kv7b1nvXAHq+oK3BdhHwpWL4GrqloJtPLycWdx8oCrJgv2Eq4E1URVjwUeD7puUb++f8JVvQVrCmyMIl9FXbdJofaDQ9dV1YWq2h9X/TQDVzJBVXep6p9UtSXQDxgjIueWMC8mRhYgTLzUwtXp7/Dqs+/1+w29X+SLgHEiUtX79fm7CKeUJI+vAReKyBleg/J4iv7/8xIwGheIXi2Ujxxgt4i0AUZEmYdXgKEi0tYLUIXzXwtXotonIl1wgSlgK65KrGWYa88CWovIVSJSWUSuANriqoNK4gtcaeM2EakiIj1x/0bTvH+zQSJyrKrm4j6TfAARuVBETvTamnbi2m0iVekZH1iAMPHyEHAU8AvwOfDfUnrfQbiG3mzgr8B03HiNUIqdR1VdDozEfelvArbjGlEjCbQBfKCqvwSl/xn35b0LeNLLczR5mO3dwwe46pcPCh3yB2C8iOwC7sH7Ne6duwfX5vKJ1zPotELXzgYuxJWysoHbgAsL5TtmqnoAFxD64D73ycAQVV3pHTIYWOdVtQ3H/XuCa4R/H9gNfAZMVtV5JcmLiZ1Yu49JJiIyHVipqr6XYIxJdlaCMOWaiHQWkRNEpJLXDbQ/ri7bGFNCNpLalHfHAW/gGoyzgBGq+nVis2RMcrAqJmOMMSFZFZMxxpiQkqaKqX79+tq8efNEZ8MYY8qVr7766hdVbRBqX9IEiObNm7No0aJEZ8MYY8oVESk8gv4Qq2IyxhgTkgUIY4wxIVmAMMYYE1LStEEYY0pfbm4uWVlZ7Nu3r+iDTUJVr16d1NRUqlSpEvU5FiCMMcWWlZVFrVq1aN68OeHXezKJpqpkZ2eTlZVFixYtoj7PqpiMMcW2b98+6tWrZ8GhjBMR6tWrF3NJzwKEMaZELDiUD8X5d7IAUQxLl8LcuYnOhTHG+MsCRDHceCNcfjnk2/IlxiRUdnY2aWlppKWlcdxxx9G4ceND2wcOHIh47qJFixg1alSR73H66afHJa8ffvghF154YVyuVVosQMQoKwu++AK2bYMlSxKdG2PKl6lToXlzqFTJPU+dWrLr1atXjyVLlrBkyRKGDx/OLbfccmi7atWq5OXlhT03IyODRx55pMj3+PTTT0uWyXLMAkSMZgStNGDVTMZEb+pUGDYM1q8HVfc8bFjJg0RhQ4cOZfjw4XTt2pXbbruNL7/8km7dupGens7pp5/OqlWrgIK/6MeNG8e1115Lz549admyZYHAUbNmzUPH9+zZk0svvZQ2bdowaNAgArNhz5o1izZt2tCpUydGjRpVZElh27ZtXHTRRbRv357TTjuNZcuWAfDRRx8dKgGlp6eza9cuNm3axFlnnUVaWhqnnnoqCxYsiO8HFoF1c43RG2/AySe713Pnwq23JjY/xpQXd90Fe/YUTNuzx6UPGhT6nOLKysri008/JSUlhZycHBYsWEDlypV5//33ufPOO3n99dePOGflypXMmzePXbt2cdJJJzFixIgjxgx8/fXXLF++nOOPP57u3bvzySefkJGRwY033sj8+fNp0aIFAwcOLDJ/9957L+np6cyYMYMPPviAIUOGsGTJEiZNmsRjjz1G9+7d2b17N9WrVyczM5Pf/va33HXXXRw8eJA9hT9EH1mAiMEvv8BHH8Edd8DOnfDMM3DgAFStmuicGVP2bdgQW3pJXHbZZaSkpACwc+dOrrnmGr7//ntEhNzc3JDn9O3bl2rVqlGtWjV+85vfsHnzZlJTUwsc06VLl0NpaWlprFu3jpo1a9KyZctD4wsGDhxIZmZmxPx9/PHHh4LUOeecQ3Z2Njk5OXTv3p0xY8YwaNAgLrnkElJTU+ncuTPXXnstubm5XHTRRaSlpZXos4mFVTHFYOZM1zB9ySXQq5f79fP554nOlTHlQ9OmsaWXxNFHH33o9V/+8hfOPvtsvv32W956662wYwGqVat26HVKSkrI9otojimJsWPH8tRTT7F37166d+/OypUrOeuss5g/fz6NGzdm6NChPP/883F9z0gsQMTgjTegWTNIT4cePVxD2/vvJzpXxpQPEyZAjRoF02rUcOl+2rlzJ40bNwbg2Wefjfv1TzrpJNauXcu6desAmD59epHnnHnmmUz1Gl8+/PBD6tevzzHHHMOaNWto164dt99+O507d2blypWsX7+ehg0bcsMNN3D99dezePHiuN9DOBYgopSTA++950oPIlC7NmRkWEO1MdEaNAgyM92PLBH3nJkZ//aHwm677TbuuOMO0tPT4/6LH+Coo45i8uTJ9O7dm06dOlGrVi2OPfbYiOeMGzeOr776ivbt2zN27Fiee+45AB566CFOPfVU2rdvT5UqVejTpw8ffvghHTp0ID09nenTpzN69Oi430M4SbMmdUZGhvq5YNC0aTBwICxYAGec4dLuvBMmTnRdXmvV8u2tjSmzvvvuO04O9NqowHbv3k3NmjVRVUaOHEmrVq245ZZbEp2tI4T69xKRr1Q1I9TxVoKI0htvQMOG0K3b4bRzz4W8PJg/P3H5MsYk3pNPPklaWhqnnHIKO3fu5MYbb0x0luLC1wAhIr1FZJWIrBaRsSH2DxeRb0RkiYh8LCJtg/a1F5HPRGS5d0x1P/Mayd69MGsWXHQReB0jADj9dKhWzaqZjKnoAgP0VqxYwdSpU6lRuLGlnPItQIhICvAY0AdoCwwMDgCel1S1naqmAQ8A//TOrQy8CAxX1VOAnkDovmml4L334NdfXftDsKOOgu7dLUAYY5KTnyWILsBqVV2rqgeAaUD/4ANUNSdo82gg0CByPrBMVZd6x2Wr6kEf8xrRG2+4RumePY/c16sXLFsGW7aUeraMMcZXfgaIxsCPQdtZXloBIjJSRNbgShCBmbNaAyoic0RksYjcFuoNRGSYiCwSkUVbt24tdkb37w+/LzcX3noLfve70APizj3XPX/wQbHf3lfbtrm8/+9/ic6JMaa8SXgjtao+pqonALcDd3vJlYEzgEHe88Uicm6IczNVNUNVMxo0aFCs99+yxU2dMXmymx+msPnz3Zds4eqlgE6d4Nhjy24107Rp8Pbb8NBDic6JMaa88TNAbASaBG2nemnhTAMu8l5nAfNV9RdV3QPMAjr6kcnKlaFtWxg50vXH3r274P433nCDec4/P/T5KSmu6qksBwiAl15yje3GJJOzzz6bOXPmFEh76KGHGDFiRNhzevbsSaBL/AUXXMCOHTuOOGbcuHFMmjQp4nvPmDGDFStWHNq+5557eD8OI2fL0rTgfgaIhUArEWkhIlWBK4GZwQeISKugzb7A997rOUA7EanhNVj3AFbgg7p13RQaf/sbTJ8OXbpA4N88Px/efBP69DlyBGiwc8+FH35wj7IkK8uN2zj3XDd3VPBMtMYkg4EDBzIt8CvIM23atKgmzAM3C2vt2rWL9d6FA8T48ePp1atXsa5VVvkWIFQ1D7gJ92X/HfCKqi4XkfEi0s877CavG+sSYAxwjXfudlyPpoXAEmCxqr7jV14rVXIT8L33HmRnQ+fO7hf3F1/Apk3hq5cCAu0QZa0U8cor7nnyZDf3/jPPJDQ7xsTdpZdeyjvvvHNocaB169bx008/ceaZZzJixAgyMjI45ZRTuPfee0Oe37x5c3755RcAJkyYQOvWrTnjjDMOTQkOboxD586d6dChAwMGDGDPnj18+umnzJw5k1tvvZW0tDTWrFnD0KFDee211wCYO3cu6enptGvXjmuvvZb9XkNn8+bNuffee+nYsSPt2rVj5cqVEe8v0dOC+zqbq6rOwlUPBafdE/Q67JhxVX0R19W11JxzDnz9NVxxhatuatECqlSBvn0jn3fyydCokQsQ119fOnmNxrRpro2kdWsYOhTuu8/Nwd+sWaJzZpLRzTfHfxGttLTI7Wd169alS5cuzJ49m/79+zNt2jQuv/xyRIQJEyZQt25dDh48yLnnnsuyZcto3759yOt89dVXTJs2jSVLlpCXl0fHjh3p1KkTAJdccgk33HADAHfffTdPP/00f/zjH+nXrx8XXnghl156aYFr7du3j6FDhzJ37lxat27NkCFD+Pe//83NN98MQP369Vm8eDGTJ09m0qRJPPXUU2HvL9HTgie8kbqsOf541yPp1ltdlVGvXq4ROhIRV4qYO7fsLEO6Zg0sXAhXXum2hw51z96UL8YkjeBqpuDqpVdeeYWOHTuSnp7O8uXLC1QHFbZgwQIuvvhiatSowTHHHEO/fv0O7fv2228588wzadeuHVOnTmX58uUR87Nq1SpatGhB69atAbjmmmuYHzTdwiVelUSnTp0OTfAXzscff8zgwYOB0NOCP/LII+zYsYPKlSvTuXNnpkyZwrhx4/jmm2+oFYf5f2w9iBCqVIEHHoABA6DQdPBhnXsuvPgifPsthPmREpMpU6BOHTd6uzgCE0pefrl7btbMlZCmTIG773bVasbEU6J6yvXv359bbrmFxYsXs2fPHjp16sQPP/zApEmTWLhwIXXq1GHo0KFhp/kuytChQ5kxYwYdOnTg2Wef5cMPPyxRfgNThpdkuvCxY8fSt29fZs2aRffu3ZkzZ86hacHfeecdhg4dypgxYxgyZEiJ8mpfExF07QqNjxi5EVo82yFyclyvqt//HrZvL941pk1zU4EEz7V/7bWwbp1b9MiYZFGzZk3OPvtsrr322kOlh5ycHI4++miOPfZYNm/ezOzZsyNe46yzzmLGjBns3buXXbt28dZbbx3at2vXLho1akRubu6hKboBatWqxa5du4641kknncS6detYvXo1AC+88AI9evQo1r0lelpwCxBx0qQJtGoVnwDx6quuS+qOHfB//xf7+cuXwzffHK5eCrj4YlddZo3VJtkMHDiQpUuXHgoQgemx27Rpw1VXXUX37t0jnt+xY0euuOIKOnToQJ8+fejcufOhfffffz9du3ale/futGnT5lD6lVdeycSJE0lPT2fNmjWH0qtXr86UKVO47LLLaNeuHZUqVWL48OHFuq9ETwtu033H0YgRrpppwwZXPVRcPXrA5s1uvYk33nDtCY0aRX/+Pfe4RVg2boTjjjsyj88+Cz//XHTbijFFsem+yxeb7juBrr0W9u1zPaAOFnPmqB9+cKO3hwxxvY5yc+H++6M/X9VVL/XseWRwCM5jFIteGWMqOAsQcdS5M/zrXzB7tvsVXxzPP+96RQ0eDCecAMOGwZNPulJENL7+Gr7//sjqpYCMDDjlFKtmMsYUzQJEnN14oxsL8be/gTdmJmqqLkCcc45r0wDX46hKlegDzvTpbvqQcIP7RFwp4osvDo8YN6YkkqWaOtkV59/JAkScicCjj8Jpp7mxB99+G/25n3wCa9e66qWARo1g9Gh4+WVYujTy+YHqpfPPh3r1wh939dUuiEyZcuS+3bvdlBxvvw3e4FRjwqpevTrZ2dkWJMo4VSU7O5vq1WNbd80aqX3y009uFPPRR7sBa9E0Wt9wgwsEP/8MNWseTt++HVq2dIsTvf12+PM/+8x1bX3+eVdFFcnFF8Onn7r5mrKz3ZTm//kPvP/+4enP69RxY0GuugrOOqvganrGAOTm5pKVlVXsMQam9FSvXp3U1FSqVKlSID1SIzWqmhSPTp06aVnzySeqVaqo/va3qnl5kY/ds0f1mGNUhwwJvf/vf1cF1Y8/Dn+NUaNUq1VT3bmz6LzNnOmu16aNqoh73by56ujRqh98oDprlurVV6sefbTbd/zxqmPGqH7zTdHXLm05OYnOgTHlF7BIw3yvJvyLPV6PshggVFUzM92nPHZs5ONeftkdN3du6P2//qp63HGqZ56pmp9/5P68PLf/kkuiy1durmrHjqqdOqmOH6+6dGno6/76q+q0aar9+rlgV6WK6muvRfcefluzRrV/f9VKlVxQM86WLaoHDiQ6F6a8sACRYDfe6D7pxx8Pf0zv3qpNmqgePBj+mMmT3XXeeUf1p59cCeWFF9wX/GWXuX2vvBL//Ads2aJ6+unuC/m55/x7n6L8+qvqX/7iSks1aqjWr6+akRE6wFU0y5ap1qypetppqtu3Jzo3pjywAJFg+/er9u0bPkj89JP70r3zzqKv07Klu07hx/HHq15wgauq8tOuXarnnOPe89//Dn/cgQOqDz2kesIJqjfcoLppU8nfOz9fdfp0F0hB9aqrVH/8UXXKFLf96qslu/7+/arZ2SXPZ6JkZ7u/j/r1XUmvY0fVX35JdK5MWWcBogzYty98kJg40aWvXFn0dT79VPXWW1UffdS1E3z3nerevf7kOZy9ew/fy6RJR+5//33Vtm3d/k6d3JfV0Uer3nef6u7dxXvP779XPftsd80OHVTnzz+8Ly/PvV/r1q7qrDj271ft0sW1wxT3GomUm6t63nmqVauqfvaZ6ttvuxJW+/aqmzcnOnemLEtYgAB6A6uA1cDYEPuHA9/gFgX6GGhbaH9TYDfw56Leq6wHCNXQQSI/X/XUU12VQHmyf//haq1x49x9/PCDawMB90v2P/9x6d9/rzpggEtv1Ej16aeLbrQPNm+eap067jF5cuhzZ8xw18/MLN793Hbb4dLYm28W7xqJdOutLu9PPnk47d13VY86SvXkk1U3bkxc3kzZlpAAAaQAa4CWQFVgaYgAcEzQ637Afwvtfw14NVkChOqRQWLxYvd68uRE5yx2eXmqQ4e6/PfurVq9umsTmDAhdKnm449Vu3Z1x7dr50pARbUbPPWUauXK7ktuzZrwx+Xnq3br5qrafv01tvuYM8fl6brrVFNTXa+z8uSll1z+//CHI/d9+KErvZ14ouqGDaWfN1P2JSpAdAPmBG3fAdwR4fiBwOyg7YuAicC4ZAoQqgWDRIcOrlqgvNZ9HzyoOnKku5eBA12bQCT5+a4hPdCWctZZrrG9sLy8w7+Kzz9fdceOovPy0Ufu+H/8I/r8//yzasOGqqec4gLLuHHuGpGCUVny9deulHDGGa5UF8onn7gu1M2bq65dW7r5M2VfogLEpcBTQduDgUdDHDfSK2n8CLTy0moCn3nPYQMEMAxYBCxq2rSpf5+gD4KDxKWXJjo3JZOfH3s99/79rh2lYUP3Gfzud64HjqprCO/f36WPHBlbm8AFF6jWrq26bVvRxx486EoL1asfHt+RlaWaklJ0t+SyYOtW1WbNVBs3doEukoULXRVd9+6lkjVTjpTpABG0/yrgOe/1JOBy73XSlSAC9u1zXVRXrUp0ThJn925XJXXssW7A3tVXq6aluV5d//pX7NdbssRd5/bbiz420DmgcG+s/v1Vf/Ob8L/IEyknx1VLTp/uSg3Vqql++WV0506Y4O63qFKeqVjKSxVTJWCn93oBsM577AC2ATdFer/yGCDMYdnZrqG4enXVWrVUZ88u/rUGDXLXycoKf8yXX7q2jYsvPrIdZPZs9z9j+vTi5yEecnPdiPff/9798g+UtgKPypVVn38++uutXOnOe/hh//Jsyp9IAcK3uZhEpDLwP+BcYCOwELhKVZcHHdNKVb/3Xv8OuFcLzQkiIuOA3ao6KdL7lbW5mEzxbN4MeXnRL/Uaytq10KaNW7L1iSeO3J+TAx07uskIlyyBunUL7s/Pd1Ott2gBH3xQ/HwU1/r18PTTbkr2jRtd/k49FU480a1aGHg+4YSCc3ZF49RT3USOtuysCYg0F1Nlv95UVfNE5CZgDq5H0zOqulxExuMi1kzgJhHpBeQC24Fr/MqPKR8aNiz5NVq2dNOu//vfULu2CwR79x5+/O9/bmGmjz46MjgAVKrk1uG4805YtQpOOqnkeSpKXp6biDEzE/77X5fWu7ebGbhvXzflezwMGOAWoNq8OT6ftUluNpurSUqbN0OHDvDLL1CjBhx11OHno46C4cPd7LmRzk9NhVGj4MEH/c3r55+7gPTNN67kdN11bs2OZs3i/17LlrnP5fHHXRA1JlIJwgKESVqqbn2O4rr8cpg711XzhJpGPz/ffblXquSqberVcyWWSlGuspKT40opkye7wPDgg26hp8q+levdZ9K6tas+e/dd/97HT/PnQ/v27rM2JWdrUpsKqSTBAVwpY9u20CsDbtoEffq4NTq6dXNfuvXquaqg+vVdG8jAgW652LVrC56rCm+8ASef7ILDqFFudb/LL/c3OID7TAYMgHnz3L2VN4sXQ48e0K+fq5Yz/rIShDFhqLov+gYN4OOPD6fPmOGWld2zxy0t26qVW3Qp+LF5sytdbNrkzmne3C0l26MHvP46zJwJaWmuzaFz59K9ry+/hK5d4dln4ZpitPrl5MB998GIEa7BvDQNGgSvvgq5uXDHHe7zNyVjCwYZU0yTJrmuod9848Zs3HCD205PV12xIvK5+fnumEcfdXNU1anjzq1Rw43BSNSkgPn5bkbc3/0u9nN//dWtSQJuvEhp2rDBDWIcM0b1+utdHmbNKt08JCNsNldjimfrVjcY7cIL3WyxgUF4xRlEl5fnpsb46af45zNWo0e7+4plNb79+92cWyKHp3wPjH4vDX/6kwsQ69e7ae3bt1etV8/mmCqpSAHC2iCMiaB+fbjsMtcFdc8eNy7iH/+AqlVjv1ZKiqtWatQo/vmM1YABbu3xd96J7vi8PFe989//umqxV191YzBKq4onJ8e151x+OTRt6nqivfqqu4crrnBVTib+LEAYU4T774d773VdRHv2THRu4uP00904iNdfL/rY/HzXDfe111xPq+uvd+NHRo6E6dPdWBG/PfWUCxJ/+tPhtNatXdD47DPXG8z4IFzRorw9rIrJmNgMH+7aQyJNj56f76qjQPXeewvu+/lnN6XJ0KG+ZlMPHHBtJj17ht4/fLjL38yZR+7Lz3dTrmzZ4m8eyzOsiskYU9iAAa7abM6c8MeMGwcPPww33+xKUcEaNnQlixdfhHXr/Mvna6/Bjz8WLD0E+3//D9LTXY+sV16BSZPcQMNu3dxYidRUN85k+HA3jYmJnnVzNaaCys2F445z4zlefLHgvm3bYMwYeO45N7L7ySdDjyvJynJTm1x/vRvTEW+qkJHhAtny5eEHIa5Z4+bXyslx28cd58aZtG3rnpcvd/Nbqbrgceedri3DJGguJmNM2ValCvTv79oh9u+HatVc+owZbozD1q1w992uFBFu0GFqqpsU8emn3bHHHx/fPH70kRscl5kZeYT6CSfAwoUuz23bQp06Rx5zxx2ug8FTT7mJEK+7zg1SrFQJduwo+Ni7F7p0cQ+/By+WaeHqnsrbw9ogjInd22+7+vt33nH19Fde6bbT0ty6E9FYs+bw+IRQ8vLcWuHjx8e+NvaFF6o2aBB6Cdvi2rBBdcQI1SpVtMD06aEetWu7tdeffjr09PEHDri2mOXLVXfujO798/PdlOunnqr62GOJX3cEGwdhjAll3z63HGnXru6LuEoV1fvvd198sRg82DV4F24M/vJL1bqMO8gAABoiSURBVI4dD3/hVqnijo0m+KxY4c65777Y8hKt9etd4HrpJTfg7pNP3Bf9xo3uS//VV9065Y0bH87/Kae4z+rEE13wCA4mdeq46x08GP49t2w5vJJkkybuuWVL1RdfjHyenyxAGGPCuuoq903QufPhpVdjtWKFG0B3551ue/t21T/8waU1auQWX1q9WnXUKNWjj3bvd/bZqm+9Ff6L8YYbXC+pRPdAys93n8vEiW6J2vPPd+uv//GPbg3zRx9VfeEFt746qJ52mhsQWdh777nPolo1t1pifr4LTGlp7rz27V2JrvACVn6zAGGMCWvDBvcLtqRTf1x6qSuNZGa61e8qVXIBoXDVy/btqg88oJqa6r6BGjZUbdtWNSPDfcn27u2mJqlWTfXGG0uWp9KUn6/63HOuJFapkusevHOnK43dfrsLliefrLp0acHzDh5Uffll1RNOcJ/HGWeU7ujwSAHC115MItIbeBi3YNBTqvqPQvuHAyOBg8BuYJiqrhCR84B/AFWBA8CtqhpxbS/rxWRMYi1Z4rqbgpuA8PHHXc+icHJzXRfWOXPg119dT6U9ew6/rlQJ3nzTNUCXJ9u3u15STzzhelM1auQa2ocNc11ya9QIfV5urmvsv/VW97nNmxf91PElkZD1IEQkBbfk6HlAFm7J0YGquiLomGNUNcd73Q/4g6r2FpF0YLOq/iQip+LWto64CKUFCGMS75//dFNwXHedm1qkIvvyS9cbbO1a13NqwIDoznv2Wdcz7MEHXVdjvyUqQHQDxqnqb73tOwBU9e9hjh8IDFHVPoXSBcgGGqnq/nDvZwHCGFPWqLouxKEWnIp0zsUXu3mvFi923XYjefxxN/7jttuKl8dELRjUGPgxaDvLSytAREaKyBrgAWBUiOsMABaHCg4iMkxEFonIoq1bt8Yp28YYEx8isQWHwDmZmVCrFgweHHkiwkcecaWUBQvg4MGS5TWUhE+1oaqPqeoJwO3A3cH7ROQU4P+AkKvnqmqmqmaoakaDBg38z6wxxpSC3/zGBYnFi+Gvfw19zIMPwujRrrTx+uv+VOn5GSA2Ak2CtlO9tHCmARcFNkQkFXgTV+20xpccGmNMGXXxxTBkCEyY4EaJB/v73+HPf3ZT0U+fXrzp56PhZ4BYCLQSkRYiUhW4EpgZfICItAra7At876XXBt4BxqrqJz7m0RhjyqyHH3a9oIYMcdN/AIwf73pJXXUVvPSSmzLFL77NMqKqeSJyEzAH1831GVVdLiLjcf1uZwI3iUgvIBfYDgRWyL0JOBG4R0Tu8dLOV9UtfuXXGGPKmtq1YcoUOO88N5dUrVquyumaa1yXWL97itlsrsYYU8aNGgX/+pd7ff31boxFvMZI2GyuxhhTjv3jH7B0qZv6fOLE0hlABxYgjDGmzKtRw019XtoS3s3VGGNM2WQBwhhjTEgWIIwxxoRkAcIYY0xIFiCMMcaEZAHCGGNMSBYgjDHGhGQBwhhjTEgWIIwxxoRkAcIYY0xIFiCMMcaEZAHCGGNMSBYgjDHGhGQBwhhjTEi+BggR6S0iq0RktYiMDbF/uIh8IyJLRORjEWkbtO8O77xVIvJbP/NpjDHmSL4FCBFJAR4D+gBtgYHBAcDzkqq2U9U04AHgn965bXFrWJ8C9AYme9czxhhTSvwsQXQBVqvqWlU9AEwD+gcfoKo5QZtHA4H1T/sD01R1v6r+AKz2rmeMMaaU+LmiXGPgx6DtLKBr4YNEZCQwBqgKnBN07ueFzm0c4txhwDCApk2bxiXTxhhjnIQ3UqvqY6p6AnA7cHeM52aqaoaqZjRo0MCfDBpjTAXlZ4DYCDQJ2k710sKZBlxUzHONMcbEmZ8BYiHQSkRaiEhVXKPzzOADRKRV0GZf4Hvv9UzgShGpJiItgFbAlz7m1RhjTCG+tUGoap6I3ATMAVKAZ1R1uYiMBxap6kzgJhHpBeQC24FrvHOXi8grwAogDxipqgf9yqsxxpgjiaoWfZDI0cBeVc0XkdZAG2C2qub6ncFoZWRk6KJFixKdDWOMKVdE5CtVzQi1L9oqpvlAdRFpDLwLDAaejU/2jDHGlEXRBghR1T3AJcBkVb0MN4jNGGNMkoo6QIhIN2AQ8I6XZiObjTEmiUUbIG4G7gDe9BqQWwLz/MuWMcaYRIuqF5OqfgR8BCAilYBfVHWUnxkzxhiTWFGVIETkJRE5xuvN9C2wQkRu9TdrxhhjEinaKqa23sR6FwGzgRa4nkzGGGOSVLQBooqIVMEFiJne+IeiB1AYY4wpt6INEE8A63BTcs8XkWZATsQzjDHGlGvRNlI/AjwSlLReRM72J0vGGGPKgmgbqY8VkX+KyCLv8SCuNGGMMSZJRVvF9AywC7jce+QAU/zKlDHGmMSLdjbXE1R1QND2fSKyxI8MGWOMKRuiLUHsFZEzAhsi0h3Y60+WjDHGlAXRliCGA8+LyLHe9qG1G4wxxiSnqEoQqrpUVTsA7YH2qpoOnFPUeSLSW0RWichqERkbYv8YEVkhIstEZK7XfTaw7wERWS4i34nIIyIiMdyXMcaYEoppyVFVzfFGVAOMiXSsiKQAjwF9gLbAQBFpW+iwr4EMVW0PvAY84J17OtAdF5BOBToDPWLJqzHGmJIpyZrURf2i7wKsVtW1qnoAmAb0Dz5AVed560wAfA6kBnYB1YGqQDWgCrC5BHk1xhgTo5IEiKKm2mgM/Bi0neWlhXMdbp4nVPUz3HTim7zHHFX9rvAJIjIsMDZj69atseTdGGNMESI2UovILkIHAgGOilcmRORqIAOvGklETgRO5nCJ4j0ROVNVFwSfp6qZQCa4NanjlR9jjDFFBAhVrVWCa28EmgRtp3ppBYhIL+AuoIeq7veSLwY+V9Xd3jGzgW7AgsLnG2OM8UdJqpiKshBoJSItRKQqcCUwM/gAEUnHTQTYT1W3BO3aAPQQkcreLLI9gCOqmIwxxvjHtwChqnnATcAc3Jf7K95ypeNFpJ932ESgJvCqiCwRkUAAeQ1YA3wDLAWWqupbfuXVGGPMkUQ1OaruMzIydNGiRYnOhjHGlCsi8pWqZoTa52cVkzHGmHLMAoQxxpiQLEAYY4wJyQKEMcaYkCxAGGOMCanCB4ipU6F5c6hUyT1PnZroHBljTNkQ7XoQSWnqVBg2DPZ40wWuX++2AQYNSly+jDGmLKjQJYi77jocHAL27HHpxhhT0VXoALFhQ/h0q3oyxlR0FTpANG0aOr1uXVfVtH49qB6uerIgYYypSCp0gJgwAWrUKJgW2A5X9WQlC2NMRVGhA8SgQZCZCc2agYh7zsyEbdtCHx8oSYQqWVjgMMYkG5usL4Tmzd2Xf2EpKXDw4JHp9erB3r0FSx01arhgY72hjDFlmU3WF6NwVU+hggNAdnbk3lBWujDGlEcWIEIIV/XUrFls1wn0hrIGb2NMeeRrgBCR3iKySkRWi8jYEPvHiMgKEVkmInNFpFnQvqYi8q6IfOcd09zPvBY2aBCsWwf5+e550KDwJYt69UJfo2nTyGMtrGRhjCnLfAsQIpICPAb0AdoCA0WkbaHDvgYyVLU9bhW5B4L2PQ9MVNWTgS7AFhIsXMni4YdDB44JE8KPtYjU4G2MMWWBnyWILsBqVV2rqgeAaUD/4ANUdZ6qBn5ffw6kAniBpLKqvucdtzvouIQKVbIIFzgGDQo/1iIlxUoWxpiyzc8A0Rj4MWg7y0sL5zpgtve6NbBDRN4Qka9FZKJXIilARIaJyCIRWbR169a4Zbw4QgUOiL3B20oWxpiyokw0UovI1UAGMNFLqgycCfwZ6Ay0BIYWPk9VM1U1Q1UzGjRoUEq5jU2sDd5WsjDGlBV+zua6EWgStJ3qpRUgIr2Au4AeqrrfS84ClqjqWu+YGcBpwNM+5tc3gWqowoJnkgVXsigcHAICJQmbedYYU1r8LEEsBFqJSAsRqQpcCcwMPkBE0oEngH6quqXQubVFJFAsOAdY4WNeS52VLIwxZZ2vI6lF5ALgISAFeEZVJ4jIeGCRqs4UkfeBdsAm75QNqtrPO/c84EFAgK+AYV5jd0jxHEmdSIXXqIDIJYtQ+20UtzEmWgkbSa2qs1S1taqeoKoTvLR7VHWm97qXqjZU1TTv0S/o3PdUtb2qtlPVoZGCQzKJZ8kCrHRhjCm+Cr2iXFkVjzaL4FHc1m5hjCmOMtGLyRQt1pKFjeI2xpSUzeZazoVrs8jMhMGD3ViKUKzdwhgDNptrUrNR3MYYv1gJIolZjyhjTFGsBFFB2VgLY0xJWAmiAopnyQJcANmwwVVpTZhgpQ1jyhMrQZgC4lWyGD3aJhY0JplZCcIcUpySRSjNmrkZbY0xZZ+VIExU4rnUKli7hTHlnY2kNgXEMor7qKMgO/vIY5s2jTyKG6zdwpjywAKEKVLgy7vwlzqEDhwTJoQfxT16NOzda4HDmPLA2iBMiUydGvpLvVKl8KO4Q6lXr2DgABuDYUxpiNQGYQHC+KJ5c1c6KClr8DbGX9ZIbUpduLW469WL7TqBWWmtsduY0mcBwvgiXI+ohx+OLXDUrRt+rIUFDmP85WuAEJHeIrJKRFaLyNgQ+8eIyAoRWSYic0WkWaH9x4hIlog86mc+jT8GDXLVQ/n57jnQQyqWwAHFG6RnwcOYkvOtF5OIpACPAecBWcBCEZmpqsFrS38NZKjqHhEZATwAXBG0/35gvl95NIkRristHNngPXhw6ONCda8NXknPFkoypuT8LEF0AVar6lpvudBpQP/gA1R1nqoGfh9+DqQG9olIJ6Ah8K6PeTRlSKgSR7gpy8PZsMEWSjImXvwMEI2BH4O2s7y0cK4DZgOISCXgQeDPkd5ARIaJyCIRWbR169YSZteURbE2djdtengkd2GBkoS1ZxgTnTLRSC0iVwMZwEQv6Q/ALFXNinSeqmaqaoaqZjRo0MDvbJoEiLXNYsKE2BdKskkHjQnNz5HUG4EmQdupXloBItILuAvooar7veRuwJki8gegJlBVRHar6hEN3Sb5xdJmETgulkkHI7VnWJuFqcj8LEEsBFqJSAsRqQpcCcwMPkBE0oEngH6quiWQrqqDVLWpqjbHVTM9b8HBFBaqzSKQHq9JB63qyVRkvgUIVc0DbgLmAN8Br6jqchEZLyL9vMMm4koIr4rIEhGZGeZyxsQkVPCItT0j0hgMsOBhkp9NtWEqlFBzR0Fss9U2a+bOC3WOrbJnyhubi8mYIoQKHIMHh55wUMQdE2quqUiTDoIFDlP2WIAwphjCTTjYrJn7krfZak0ysMn6jCmGcG0WkbrShpOdHX7wnjFllQUIY8II1xuqOA3e4VhPKVOWWRWTMcUUjwZva7MwiRapismWHDWmmGIZwAehAwfEvjTroEHhV/IzJp4sQBgTZ4mcrTbUe1jgMMVlVUzGJFCsS7MWt4utBQkTjvViMqaMiudstdZTysSbBQhjEiies9WGE6mnlPWgMpFYG4QxCRav2WrD9ZQKzClVuM3ik0/gueds5T0TnpUgjCmjYp2tNtZ1vTMzi7fynpU6Kg5rpDYmicQyp1QkhdfPCB6bEW6SQit1lE82F5MxFVi4nlIpKXDwYPTpgfU0ws1PNWGCdbEtj6wXkzEVWLieUsOGhU4PFRzAffHbet8Vi68BQkR6i8gqEVktIkesCCciY0RkhYgsE5G5ItLMS08Tkc9EZLm37wo/82lMMgvXZjF5cmwr7zVtGt/1vi1wlH2+VTGJSArwP+A8IAu3BOlAVV0RdMzZwBequkdERgA9VfUKEWkNqKp+LyLHA18BJ6vqjnDvZ1VMxsTH1KmRF0OKZb3vcGxQX9mRqCqmLsBqVV2rqgeAaUD/4ANUdZ6qBv5EPgdSvfT/qer33uufgC1AAx/zaozxRJrFNl7rfRd3UJ+VOkqXnwGiMfBj0HaWlxbOdcDswoki0gWoCqwJsW+YiCwSkUVbt24tYXaNMQHhutiG21ca058HSjbh1gg38VcmGqlF5GogA5hYKL0R8ALwe1XNL3yeqmaqaoaqZjRoYAUMYxIl1rEZ4QJHYFBfqCBw113FG7dhis/PkdQbgSZB26leWgEi0gu4C+ihqvuD0o8B3gHuUtXPfcynMSYO/Jz+PHB+KIEgYrPb+kBVfXnggs9aoAWuimgpcEqhY9JxVUetCqVXBeYCN0f7fp06dVJjTPnx4ouqzZqpirjnF190r13ZoeAjcEyofSkpodPr1VOtUaNgWo0a7n1CvXdFBSzScN/j4XbE4wFcgOvJtAZXEgAYD/TzXr8PbAaWeI+ZXvrVQG5Q+hIgLdJ7WYAwpvwLFwQCX+KhvvBDHR/pESlwqFa84JGwAFGaDwsQxpR/4YJApC/vcEEl1kekIJTMpY5IAcKm2jDGlCmxLqcabtxGuNltw6moizHZVBvGmHIjUhfbcMfHowdVcRdjSua1NqwEYYxJWqFKIxB+pPhdd8W2BGzg3MLXuuaagmttBL9HWStxWAnCGFMhhSqNRBopHuuAv3BzUCXLWhtWgjDGmCCxlDpinYMq1HmJXmvDShDGGBOlWEod4eagSkkJnx6uZFEWR4pbCcIYY4opXA+qcG0Q4UocIu453NdxpFJHSUeKWwnCGGN8UFbX2ogXK0EYY0wpKY21Npo1c1Vj0bIShDHGlAGlsdZGuLEcxWElCGOMKcNiHSluJQhjjKkgYh0pHuiWGw9+rgdhjDEmDmJZayOeYyYsQBhjTDkVKXDEg1UxGWOMCcnXACEivUVklYisFpGxIfaPEZEVIrJMROaKSLOgfdeIyPfe4xo/82mMMeZIvgUIEUkBHgP6AG2BgSLSttBhXwMZqtoeeA14wDu3LnAv0BXoAtwrInX8yqsxxpgj+VmC6AKsVtW1qnoAmAb0Dz5AVeepaqDz1udAqvf6t8B7qrpNVbcD7wG9fcyrMcaYQvwMEI2BH4O2s7y0cK4DZsdyrogME5FFIrJo69atJcyuMcaYYGWiF5OIXA1kAD1iOU9VM4FM7xpbRaSopT7qA78UK5PlX0W9d7vvisXuO3Zhx2r7GSA2Ak2CtlO9tAJEpBdwF9BDVfcHnduz0LkfRnozVW1QVIZEZFG4EYPJrqLeu913xWL3HV9+VjEtBFqJSAsRqQpcCcwMPkBE0oEngH6quiVo1xzgfBGp4zVOn++lGWOMKSW+lSBUNU9EbsJ9sacAz6jqchEZDyxS1ZnARKAm8Kq4CdE3qGo/Vd0mIvfjggzAeFXd5ldejTHGHMnXNghVnQXMKpR2T9DrXhHOfQZ4Js5Zyozz9cqTinrvdt8Vi913HCXNbK7GGGPiy6baMMYYE5IFCGOMMSFVmABR1LxQyUJEnhGRLSLybVBaXRF5z5vX6r1knLZERJqIyDxvbq/lIjLaS0/qexeR6iLypYgs9e77Pi+9hYh84f29T/d6EiYdEUkRka9F5G1vu6Lc9zoR+UZElojIIi8t7n/rFSJARDkvVLJ4liOnJRkLzFXVVsBcbzvZ5AF/UtW2wGnASO/fONnvfT9wjqp2ANKA3iJyGvB/wP9T1ROB7biZCpLRaOC7oO2Kct8AZ6tqWtD4h7j/rVeIAEEU80IlC1WdDxTuEtwfeM57/RxwUalmqhSo6iZVXey93oX70mhMkt+7Oru9zSreQ4FzcBNgQhLeN4CIpAJ9gae8baEC3HcEcf9brygBItZ5oZJNQ1Xd5L3+GWiYyMz4TUSaA+nAF1SAe/eqWZYAW3ATW64BdqhqnndIsv69PwTcBuR72/WoGPcN7kfAuyLylYgM89Li/rdeJuZiMqVHVVVEkrZvs4jUBF4HblbVHG8AJpC8966qB4E0EakNvAm0SXCWfCciFwJbVPUrEemZ6PwkwBmqulFEfgO8JyIrg3fG62+9opQgopoXKoltFpFGAN7zliKOL5dEpAouOExV1Te85Apx7wCqugOYB3QDaotI4AdgMv69dwf6icg6XJXxOcDDJP99A6CqG73nLbgfBV3w4W+9ogSIIueFSnIzgcCqfNcA/0lgXnzh1T8/DXynqv8M2pXU9y4iDbySAyJyFHAerv1lHnCpd1jS3beq3qGqqaraHPf/+QNVHUSS3zeAiBwtIrUCr3Fz1X2LD3/rFWYktYhcgKuzDMwLNSHBWfKFiLyMmwm3PrAZtzLfDOAVoCmwHrg82ea2EpEzgAXANxyuk74T1w6RtPcuIu1xDZIpuB98r6jqeBFpiftlXRe3cuPVQbMlJxWviunPqnphRbhv7x7f9DYrAy+p6gQRqUec/9YrTIAwxhgTm4pSxWSMMSZGFiCMMcaEZAHCGGNMSBYgjDHGhGQBwhhjTEgWIIwpgogc9GbNDDziNuGfiDQPnnnXmLLEptowpmh7VTUt0ZkwprRZCcKYYvLm5H/Am5f/SxE50UtvLiIfiMgyEZkrIk299IYi8qa3dsNSETndu1SKiDzprefwrjciGhEZ5a1vsUxEpiXoNk0FZgHCmKIdVaiK6YqgfTtVtR3wKG6kPsC/gOdUtT0wFXjES38E+Mhbu6EjsNxLbwU8pqqnADuAAV76WCDdu85wv27OmHBsJLUxRRCR3apaM0T6OtxiPWu9iQJ/VtV6IvIL0EhVc730TapaX0S2AqnBUz94U5O/5y3ygojcDlRR1b+KyH+B3bipUmYErftgTKmwEoQxJaNhXscieK6ggxxuG+yLWwmxI7AwaJZSY0qFBQhjSuaKoOfPvNef4mYYBRiEm0QQ3DKQI+DQIj/HhruoiFQCmqjqPOB24FjgiFKMMX6yXyTGFO0ob8W2gP+qaqCrax0RWYYrBQz00v4ITBGRW4GtwO+99NFApohchyspjAA2EVoK8KIXRAR4xFvvwZhSY20QxhST1waRoaq/JDovxvjBqpiMMcaEZCUIY4wxIVkJwhhjTEgWIIwxxoRkAcIYY0xIFiCMMcaEZAHCGGNMSP8f2eAc9cUqerEAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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6KCI1/nkk08YP348c+bMoaioiC5dutC1a1cABg4cyPnnnw/A9ddfzyOPPMKll17KSSedxIknnsgpp5yy3bUKCwsZNmwY06ZNo23btpx99tn8+9//ZuTIkQA0a9aM2bNn88ADD3DHHXfw8MMPb3f+rrvuypQpU6hTpw5fffUVgwYNYtasWUyaNIn//ve/fPTRR9SrV4+1a9cCMGTIEEaNGsWAAQMoLCxk27ZtSf2tXW5IZbbTe+4pvWZ1HmqaSV6DSLPwZqbw5qXnn3+eLl260LlzZ+bNm7ddc1BZ7733HgMGDKBevXrssssunHTSSSX7vvjiCw4//HA6duzI008/zbx582KWZ+HChey11160bdsWgKFDh/Luu++W7B84cCAAXbt2LUnwF27r1q2cf/75dOzYkVNPPbWk3PGmBfdJei6kMrKdek2hYnKmBhHrl346nXzyyVx++eXMnj2bjRs30rVrV7799lvuuOMOZs6cSePGjRk2bFjUNN/lGTZsGBMnTqRTp048/vjjvP322xUqbyhleLR04eFpwbdt2+ZrQbikRBt51KRJ5M7l0PDTSENUy5us5pKX1hqEiPQTkYUislhERkXY31pEponIZyLytojkh22fLSJzRGSeiFyUznKmU/369TnyyCM599xzS2oPv/zyCzvvvDMNGzbkp59+YtKkSTGvccQRRzBx4kQ2bdrEhg0beOWVV0r2bdiwgd13352tW7fydFhvXoMGDdiwYcMO19p///1ZsmQJixcvBiwra+/eveN+P54W3EUTK31FRXMbVdlsp1kubQFCRPKA+4HjgfbAIBFpX+awO4AnVfUg4Cbgb8H2H4BeqloA9ABGicge6Sprug0aNIi5c+eWBIhOnTrRuXNn2rVrx+DBgzn00ENjnt+lSxdOP/10OnXqxPHHH8/BBx9csu/mm2+mR48eHHroobRr165k+xlnnMHtt99O586dt+sYrlOnDo899hinnnoqHTt2pEaNGlx0Ufzx19OCu0iidSBffHFqchuFagg+BLVyiWV7TcOFRXoBN6rqccHzawFU9W9hx8wD+qnqMhERYL2q7lLmOk2BT4Geqvp9tNfr1q2bhuYPhCxYsIADDjggVW/JpYn/O1V/bdpE/tKPNikt2vbWra2vwFUeEflEVbtF2pfOJqaWwLKw58uDbeHmAgODxwOABkFAQET2FJHP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YMQI+O03eOgha2IK16GDDV+NFSDatt3xPOecq+5y/mtt4UJ48UXrnD7ggB335+XZjOpoHdVVfYirc84lK+cDxP77w6efwjXXRD+mZ09b23njxu23b95sI588QDjnslHOBwiAjh2hVq3o+3v1sgl0s2Ztv/3rr227BwjnXDbyABGHUMK7sv0QPoLJOZfNPEDEoXlzW/7TA4RzLpd4gIhTz57WUR0+YW7hQth9d9hll8yVyznn0sUDRJx69YIff4SlS0u3+Qgm51w28wARp9CEufDhrh4gnHPZzANEnDp2hLp1S/shVq+GtWs9QDjnspcHiDjVrAkHH1waIL780u49QDjnspUHiAT07AmzZ9t61T6CyTmX7TxAJKBXL9i61WZeL1xok+vatMl0qZxzLj08QCQgvKN64UKbG5GXl9kyOedcuniASMBuu1mNYcYMCxDt2mW6RM45lz4eIBLUsye8/77lYfL+B+dcNvMAkaCePeGHH6CoyAOEcy67eYBIUK9epY89QDjnspkHiAQVFEDt2vbYA4RzLpt5gEhQrVrQtatleG3cONOlcc659Nkp0wWojm64AVasyHQpnHMuvTxAJOG44zJdAuecSz9vYnLOOReRBwjnnHMReYBwzjkXkQcI55xzEXmAcM45F5EHCOeccxF5gHDOOReRBwjnnHMRiapmugwpISKrgO/KOawZsLoSilMV5ep79/edW/x9J661qjaPtCNrAkQ8RGSWqnbLdDkyIVffu7/v3OLvO7W8ick551xEHiCcc85FlGsBYmymC5BBufre/X3nFn/fKZRTfRDOOefil2s1COecc3HyAOGccy6inAkQItJPRBaKyGIRGZXp8qSLiDwqIitF5IuwbU1EZIqIfBXcZ91iqSKyp4i8JSLzRWSeiIwItmf1exeROiLysYjMDd73/wu27yUiHwWf9+dEpFamy5oOIpInIp+KyP+C57nyvpeIyOciMkdEZgXbUv5Zz4kAISJ5wP3A8UB7YJCItM9sqdLmcaBfmW2jgGmquh8wLXiebYqAK1S1PdAT+FPwb5zt730zcJSqdgIKgH4i0hO4DbhLVfcFfgb+mMEyptMIYEHY81x53wBHqmpB2PyHlH/WcyJAAN2Bxar6japuAcYDJ2e4TGmhqu8Ca8tsPhl4Inj8BPD7Si1UJVDVH1R1dvB4A/al0ZIsf+9qfg2e1gxuChwFvBhsz7r3DSAi+UB/4OHguZAD7zuGlH/WcyVAtASWhT1fHmzLFS1U9Yfg8Y9Ai0wWJt1EpA3QGfiIHHjvQTPLHGAlMAX4GlinqkXBIdn6eb8buBrYFjxvSm68b7AfAW+IyCcickGwLeWf9Z0qegFXvaiqikjWjm0WkfrA/wEjVfUX+1FpsvW9q2oxUCAijYCXgHYZLlLaiciJwEpV/URE+mS6PBlwmKquEJFdgSki8mX4zlR91nOlBrEC2DPseX6wLVf8JCK7AwT3KzNcnrQQkZpYcHhaVScEm3PivQOo6jrgLaAX0EhEQj8As/HzfihwkogswZqMjwLuIfvfNwCquiK4X4n9KOhOGj7ruRIgZgL7BSMcagFnAC9nuEyV6WVgaPB4KPDfDJYlLYL250eABap6Z9iurH7vItI8qDkgInWBY7D+l7eAU4LDsu59q+q1qpqvqm2w/89vquoQsvx9A4jIziLSIPQYOBb4gjR81nNmJrWInIC1WeYBj6rqmAwXKS1E5FmgD5b+9ydgNDAReB5ohaVEP01Vy3ZkV2sichjwHvA5pW3Sf8H6IbL2vYvIQViHZB72g+95Vb1JRPbGflk3AT4FzlTVzZkrafoETUxXquqJufC+g/f4UvB0J+AZVR0jIk1J8Wc9ZwKEc865xORKE5NzzrkEeYBwzjkXkQcI55xzEXmAcM45F5EHCOeccxF5gHCuHCJSHGTNDN1SlvBPRNqEZ951rirxVBvOlW+TqhZkuhDOVTavQTiXpCAn/z+CvPwfi8i+wfY2IvKmiHwmItNEpFWwvYWIvBSs3TBXRA4JLpUnIg8F6zm8EcyIRkQuC9a3+ExExmfobboc5gHCufLVLdPEdHrYvvWq2hH4FzZTH+A+4AlVPQh4Grg32H4v8E6wdkMXYF6wfT/gflXtAKwD/hBsHwV0Dq5zUbrenHPR+Exq58ohIr+qav0I25dgi/V8EyQK/FFVm4rIamB3Vd0abP9BVZuJyCogPzz1Q5CafEqwyAsicg1QU1VvEZHXgV+xVCkTw9Z9cK5SeA3CuYrRKI8TEZ4rqJjSvsH+2EqIXYCZYVlKnasUHiCcq5jTw+4/DB5/gGUYBRiCJREEWwZyOJQs8tMw2kVFpAawp6q+BVwDNAR2qMU4l07+i8S58tUNVmwLeV1VQ0NdG4vIZ1gtYFCw7VLgMRG5ClgFnBNsHwGMFZE/YjWF4cAPRJYHjAuCiAD3Bus9OFdpvA/CuSQFfRDdVHV1psviXDp4E5NzzrmIvAbhnHMuIq9BOOeci8gDhHPOuYg8QDjnnIvIA4RzzrmIPEA455yL6P8DABVLPC/UqHUAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Yhwxry0m6S3z",
        "outputId": "5b61770e-9b51-4ec2-8315-40cb0b29564c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 86
        }
      },
      "source": [
        "evaluation = model.evaluate(x_test,  y_test,batch_size=batch_size, verbose=2)\n",
        "print()\n",
        "print(\"Test loss :\",evaluation[0]*100,\"%\")\n",
        "print(\"Test accuracy :\",evaluation[1]*100,\"%\")"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "1656/1656 - 4s - loss: 0.3191 - accuracy: 0.9223\n",
            "\n",
            "Test loss : 31.909576058387756 %\n",
            "Test accuracy : 92.2270655632019 %\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "awiJTiJLnbRQ"
      },
      "source": [
        "### Prediction"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b0P5TPuki26a",
        "outputId": "5bb62742-ff13-4ba4-aefb-d86a428fd1e1",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "predict = 105\n",
        "a = np.argmax(model.predict(x_test)[predict])\n",
        "print(\"Predicted Class: \",a)\n",
        "print(\"Actual Class: \",np.argmax(y_test[predict]))"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Predicted value:  7\n",
            "Actual value:  7\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AgUKgBXomszP"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}